Вы находитесь на странице: 1из 52

SIMULADOR DE YACIMIENTO (PETRLEO GAS)

Por
Andres david herrera palacio










UNIVERSIDAD NACIONAL DE COLOMBIA
SEDE MEDELLIN
FACULTAD DE MINAS
2011










RESUMEN
Se procedi a realizar un simulador para un yacimiento bifsico en el cual tenemos constantes los
caudales y las presiones son desconocidas, para nuestro caso flujo petrleo-gas lineal 3D con
malla irregular y para las tres direcciones varan las permeabilidades, las ecuaciones fueron
planteadas por el mtodo IMPIS y se resolvi por medio de mtodo LSOR.

Las direcciones de los ejes sera:

Z

X

Y
Tendremos 4 pozos productores.

Porosidad 0.15
Espesor 50 ft

1.35 cp

0.4 cp

Flujo bifsico (oil-gas)
Balance de masa: la transferencia de masa solo se da en el componente de gas entre fases gas y petrleo.
La porcin del componente del gas disuelto en la fase aceite es conocida como gas en solucin. La
componente del gas este contenido en la componente de gas libre y la componente de gas en solucin
contenido en la fase aceite. La tasa de transferencia de masa de gas entre fase de aceite y gas (

(gas libre, gas en solucin). La ecuacin de balance de materiales para la componente c, sobre un
volumen de control de fluido del yacimiento poroso sobre un intervalo de trabajo t es = (

(9.1)
Donde:
(

= suma de entradas de masa del componente c a travs de la superficie de control en


sobre el intervalo t.
(

= suma de salida de masa del componente c a travs de la superficie de control en


sobre el intervalo t.

=suma de la generacin de masa y agotamiento de masa a travs del componente c en t.


(

= acumulacin de masa del componente c causada por los cambios de compresibilidad y saturacin
de los fluidos en el volumen de control sobre el intervalo t.
Para el componente c=0,

; estos trminos pueden estar expresados como


(

[(

] (9.2)

(

[(

] (9.3)

(9.4)
(

[(

] (9.5)
Donde,

= flujo de masa, A rea perpendicular al flujo;

= masa por unidad de volumen del medio


poroso,

=tasa de transferencia de masa entre las fases, la cual es positiva para generacin y negativa
para el agotamiento;

= tasa de agotamiento de masa a travs del pozo, el cual es posotivo para la


inyeccin y negativo para la produccin y

= volumen total del volumen de control.


Sustituyendo (9.2) y (9.5) en (9.1) y reorganizando trminos queda


[(

] [(

]
[(

] (

[(

]
(9.6)
Donde c=0, fgy sg.
Dividiendo (9.6) entre y multiplicando por x, y y z.
*
(

+ [
(

] *
(

+
(

*
(

+ (9.7)
Tomando el lmite de x, y, z y t y sustituyendo por la derivada parcial de la ecuacin (9.7 se tiene


(9.8)

Donde c=0, fg, sg; x 0 y 0 z 0 Vb 0.
Para reservorios con espesor uniforme, se asume que Ax, Ay, Az son independientes de x, y, z
respectivamente.
En este caso:


Para el aceite y el gas libre, es posible expresar el flujo msico como el producto de la densidad y la
velocidad Darcys para la fase l; masa por unidad de volumen ( concentracin) como el producto de la
porosidad, la fase de saturacin, y la densidad de la fase y la tasa de flujo msico como el producto de la
tasa de flujo y la densidad volumtrica de las fases para el componente solo del gas, el flujo msico, la
masa por unidad de volumen y la tasa de flujo msico puede ser expresada en trminos de las
propiedades de la fase petrleo

y la densidad de la fase gas a condiciones estndar,

, masa
por unidad de volumen, flujo msico y la tasa de flujo, son cantidades que describe componentes,
(c=0,

), mientras que el flujo (velocidad volumtrica), tasa de flujo volumtrica, densidad, factor
de volumen de la formacin (FVF), saturacin y la relacin de gas en solucin de petrleo, describe la
fase (l=0 , g). los trminos en la ecuacin (9.8) puede ser expresados como

(9.9a)
Donde c=0 y Fg.
(9.9b)

; donde c=0,

;
(9.10a)

; donde c=0,

. (9.10b)

donde c=


(9.11a)

; donde c=0,

. (9.11b)

donde c=


(9.12a)

; donde c=0,

. (9.12b)

donde c=


(9.13a)

; donde c=0,

. (9.13b)

donde c=


(9.14a)

; donde c=0,

. (9.14b)

donde c=


El termino de la generacin puede ser definido como
(9.15a)

0, donde c=0; donde c=

(.b

(.

En las ecuaciones 9.15b y 9.15c,

= tasa de transferencia del componente gas entre las fases gas y


aceite, (o entra el gas libre y el gas en solucin).para la fase gas,

mientras que

para la fase gas.


La ecuacin de conservacin de masa para el petrleo, puede ser obtenida por combinacin de las
ecuaciones 9.8 y 9.10 hasta la 9.15 para c=0 , dividiendo el resultado por

usando la deformacin
de Bo;

; y

, la ecuacin de conservacin de masa para la componente del aceite est


dada por:

(9.16)
La ecuacin de conservacin de masa para el componente gas (c=g) es obtenido la ecuacin 9.8
para gas libre y gas en solucin y sumando las dos ecuaciones para eliminar

. La ecuacin queda:

) (

) (9.17)
Sustituyendo las ecuaciones 9.10 hasta la 9.14 dentro de la ecuacin 9.18 y diviendo del resultado por

y usando la definicin de

; la ecuacin de conservacin de masa


para el componente del gas es obtenido,

(9.19)
Donde


La ecuacin 9.16 y 9.19 son las ecuaciones de conservacin de masa para el flujo de aceite y el gas,
respectivamente. Para un sistema 3D (rectangular), multifasico, (black oil y gas).
LEY DE DARCY.
Ley de Darcy en una direccin puede ser expresada como:

= factor de conversin de unidades del coeficiente de transmisibilidad; k= permeabilidad absoluta de la


roca en direccin de flujo, =viscosidad del fluido, =potencial del fluido, U= tasa de flujo por unidad de
rea de la seccin transversal de la seccin transversal perpendicular a la direccin de flujo. Para 3D la ley de
Darcy es

con la definicin de gradiente de potencial

.
Para flujo multifasico la forma extendida de la ley de Darcy est dada por cada fase por cada fase por:

; donde gas.

(12.25) Donde = o gas;

=permeabilidad relativa, viscosidad,


presin, gravedad del fluido para la fase , respectivamente.
Ecuaciones de flujo.
La ley de Darcy para flujo multifsico.
Puede ser sustituida dentro de la ecuacin de conservacin de masa para le aceite y el gas.

))

))

))

[]

))

))

))

[]

= tasa de produccin (inyeccin) del componente de gas.



Para completar la descripcin de flujo se tiene:

[] y

[]
El modelo de flujo petrleo gas consiste en estas 4 ecuaciones con 4 incognitas:

.
Reorganizando las ecuaciones 3 y 4, se tiene:

))

))

))

(
(

[]

))

))

))

[]


[] [] Se pueden solucionar con condiciones iniciales y de frontera para las incognitas

. Se pueden obtener sustituyendo en las ecuaciones [] [].



Flujo multifasico en dos dimensiones: Fluidos Petrleo y gas
I) Expansin de la ecuacin que rige el sistema
1) expansin de la ecuacin asociada al aceite.

))

))

)

Al expandir esta ecuacin se debe pensar en las prdidas o ganancias que se tienen por cadas gravitacionales.
Para obtener una ecuacin caracterstica se debe pensar en expandir cada uno de los trminos de esta manera:

1.1.a)Expansin en la direccin X:

))

))
Si el cambio en altura es cero las perdidas gravitacionales son cero.
Expandiendo por diferencias finitas la derivada mas externa se transforma en:

[(

[(

]

Las derivadas internas tienen la misma solucin

[(

) (

)]
[(

) (

)]

Estos cambios en altura pueden determinarse usando funciones trigonomtricas
Se debe recordar que estas son alturas bloque a bloque, pero se debe considerar alturas totales.








Se debe sumar alturas anteriores, y encontrar una buena aproximacin de esta.
[(

x
)

[(

x
)

x
)

x
)

]
[(

) (

)]
[(

)
Al agrupar los trminos de transmisibilidad en i + e i -
[(

)) (

))]
[(

] (

))

1.1.b) Definiciones de transmisibilidad


Expansin de las transmisibilidades para bloque centrado:

(
0.00

(
0.00

)

Expansin en la direccin X trminos de las transmisibilidades:


[

))

))]
[

] (

))

1.2.a) Expansin en la direccin Y

))
Siguiendo el mismo procedimiento
[(

)) (

))]
[(

] (

))


1.2.b) Definiciones de transmisibilidad.


Expansin de las transmisibilidades para bloque centrado:

(
0.00

(
0.00

)

Expansin en la direccin Y en trminos de las transmisibilidades:

[

(
.

))

))]
[

] (

))

1.3.a) Expansin en la direccin Z

))
Siguiendo el mismo procedimiento
[(

)) (

))]
[(

] (

))

1.3.b) Definiciones de transmisibilidad.



Expansin de las transmisibilidades para bloque centrado

(
0.00

(
0.00

)

Expansin en la direccin Z en trminos de las transmisibilidades:

[

(
.

))

))]
[

] (

))

1.3.a) expansin del trmino que depende del tiempo

)=
( ) ( ) ( ) ( )
1
o
n
n
t o o o t o t o
b S b S S b | | |
+
A = A + A []

( ) ( ) ( ) ( ) ( )
1 n n
t o t o o t
b b b | | |
+
A = A + A []
( )
t b r t o
C P | | A = A []
( ) ( )
1
1 '
1
*
n n
n n o o
t o o o o t o n n
o o
b b
b P P b P
P P
+
+
+

A = = A

[0]
Al reemplazando la ecuacin (8), (9) y (10) en la ecuacin (7) se obtiene:
( ) ( )
1
1 '
n
n n n
t o o o t o o o o b r t o
b S b S S b b C P | | | |
+
+
( A = A + + A



O bien,

( )
10 11 t o o t o t o
b S C P C S | A = A + A

1.3.b) Definicin de las constantes

( )
1 '
10
n n
on o o b r
C S b b C | |
+
= + ;
10
'
10
b
V
C C
t
=
A

( )
1
11
n
o
C b |
+
= ;
11
'
11
b
V
C C
t
=
A



Uniendo las expansiones en trminos de las transmisibilidades para las coordenadas X,Y,Z y para el tiempo
correspondientes al aceite .
[

)]
[

] (

))
[

))

))]
[

] (

))
[

(
.

))

))]
[

] (

))

t(

t(



2) Expansin de la ecuacin asociada al gas.

)+

))

))



Relaciones adicionales


P
cog
se denomina presin capilar entre el petrleo y el gas.
2.1.a) Expansin de la ecuacin en la direccin X :

x
*

x
)

x
)+ x

Agrupando trminos semejantes

x
*

x
)

x
)

x
)

x
+ x

(

) (

)
(

)
(

) (

)
(

)
(

) (

)
(

)
(

)
2.1.b) definicin de transmisibilidades


Expansin de las transmisibilidades para bloque centrado:

(
0.00

(
0.00

)


Expansin en la direccin X en trminos de las transmisibilidades:

(



2.2.a) Expansin de la ecuacin en la direccin Y.

y
*

y
)

y
)+ y

y
*

y
)

y
)

y
)

y
+ y

(

) (

)
(

)
(

) (

)
(

)
(

) (

)
(

)
(

)

2.2.b) definicin de transmisibilidades


Expansin de las transmisibilidades para bloque centrado:

(
0.00

(
0.00

)

Expansin en la direccin Y en trminos de las transmisibilidades:

(




2.3.a) Expansin de la ecuacin en la direccin Z.

z
)

z
)+

z
*

z
)

z
)

z
)

z
+ z

(

) (

)
(

)
(

) (

)
(

)
(

) (

)
(

)
(

)

2.3.b) definicin de transmisibilidades



Expansin de las transmisibilidades para bloque centrado:

(
0.00

(
0.00

)

Expansin en la direccin Z en trminos de las transmisibilidades:

(



2.4.a) Expansin del trmino que depende del tiempo.

)
( ) ( )
( ) ( ) ( ) ( ) ( )
1
1
1
1
t g g o s o t o s o g o
n
n n
n
o s t o o t o s g t o o t g
b S b R S b R S b S
b R S S b R b S S b
| | | |
| | | |
+
+
( A + = A +

= A + A A + A
[]



( ) ( ) ( )
'
1
n
n
t o s o s o s b r t o
b R b R b R C P | | |
+
(
A = + A

[]
( )
1 ' n n
t g g t g g b r t o
b b P b C P | | |
+
( A = A + A

[]

Al llevar [] [] []


( ) ( )
( ) ( ) ( )
( ) ( )
1 '
1
1
1 '
1
1
t g g o s o t o s o g o
n n
n n
o s t o o o s o s b r t o
n
n
n n
g t o o g t g g b r t o
b S b R S b R S b S
b R S S b R b R C P
b S S b P b C P
| | | |
| | |
| | |
+
+
+
+
( A + = A +

(
= A + + A

( A + A + A



Definicin de constantes

];
'
20 20
b
V
C C
t
=
A

( ) ( )
1
1
21
n
n
o s g
C b R b | |
+
+
= ;
'
21 21
b
V
C C
t
=
A

1 '
22
n n
g g
C S b |
+
= ;
'
22 22
b
V
C C
t
=
A





Uniendo las expansiones en trminos de las transmisibilidades para las coordenadas X,Y,Z y para el tiempo
correspondientes al gas. Los efectos gravitacionales son cero.

(


+(



Al unir las expresiones del aceite y el gas, y agrupando trminos semejantes nos queda:

(

t(

t(

t(

t(

t(




Llevamos esta ecuacin general en trminos de los Estncils:

t(

t(

t(

t(

t(




METODO IMPIS (implicite pressure implicite saturation)
Mtodos Secuenciales
- El mtodo calcula simultneamente las presiones para las fases.
- Considera la saturacin implcita
- Se aplica a fluidos incompresibles (flujo petrleo y gas)
- Requiere resolver a cada tiempo (iteracin) un sistema de 2N ecuaciones (N=#de bloques)
i) Sistema de ecuaciones

Transmisibilidades

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00

(
0.00





En diferencias finitas:
(

]
Como ya se demostr anteriormente, se tiene:
(


Paso 1: Expresar ecuaciones en trminos de la presin de una de las fases.
(

) (

) (


Paso 2: Eliminar Saturaciones.
Sumando las ecuaciones anteriores y multiplicando por (

queda:
(

) (

) (


Definiendo


Llevando estas tres ltimas ecuaciones a la ecuacin, se tiene:
(


Esta ecuacin es aplicada a todos los bloques de la malla del sistema de ecuaciones a resolver en
el cual las incgnitas son, en este caso, las presiones en los bloques de la fase petrleo
Para resolver el sistema de ecuaciones las saturaciones se toman al tiempo t
n
; o sea que el
sistema de ecuaciones se puede representar como
(


Expansin de la ecuacin anterior es la siguiente:
((

((

((

[((

) ((

) ((

) ((

) ((

) ((

+ ((

((

((


Ecuacin del sistema por el mtodo IMPIS, al expandir implcitamente sobre la presin encontramos un
sistema heptadiagonal:




Donde:

S= ((

)
W=((

)
C=[((

) ((

)
((

) ((

) ((

) ((

]
E= ((

)
N= ((

)
A = ((

)
AB = ((

)
F= (




Descripcin del sistema de ecuaciones por el mtodo LSOR

Se aplica criterio Von Newman, para el yacimiento cerrado (fronteras cerradas), recorriendo por filas, se
obtiene:



Donde:

S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



1. CAPAS DE L FONDO

- (1,1,1):

((

((

((

) ((

)
((

((

) (



- (N
x
,1,1):

0
W
i,j,k
=((

((

) ((

)
((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
F
i,j,k
= (



- (1,N
y
,1):

0
S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

]
E
i,j,k
= ((

)
A
i,j,,k
= ((

)
F
i,j,k
= (



- (N
x
,N
y
,1):

0

S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

]

W
i,j,k
=((

)
A
i,j,k
= ((

)
F
i,j,k
= (



-
( i,1,1), 1< i < N
x

0
N
i,j,k
= ((

)
A
i,j,k
= ((

)
C
i,j,k
=[((

) ((

) ((

) ((

]
E
i,j,k
= ((

)
W
i,j,k
=((

)
F
i,j,k
= (



-
(i,N
y
,1) 1< i < N
x

0
W
i,j,k
=((

)
S
i,j,k
= ((

)
C=[((

) ((

)
((

) ((

]
A
i,j,k
= ((

)
E
i,j,k
= ((

)
F
i,j,k
= (


-
(1,j,1) 1< j < N
y

0
S
i,j,k
= ((

)
E
i,j,k
= ((

)
C
i,j,k
=[((

) ((

) ((

) ((

]
A
i,j,k
= ((

)
N
i,j,k
= ((

)
F
i,j,k
=
(



-
(Nx,j,1) 1<j <Ny

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
N
i,j,k
= ((

)
A
i,j,k
= ((

)
F
i,j,k
= (



-
(1,j,1) 1< j <N
x

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
E
i,j,k
= ((

)
A
i,j,k
= ((

)
F
i,j,k
= (



- CAPAS INTERMEDIAS.
- Para (1,1,k) 1<k<Nz

((

)
C
i,j,k
= [((

) ((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
F
i,j,k
= (



- Para (Nx,1,k) 1<k<Nz

0
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (


- Para (1,Ny,k) 1<k<Nz

0
S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
E
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



- Para (Nx,Ny,k) 1<k<Nz

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



- Para (i,1,k) 1<i<Nx 1<k<Nz

0
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (




- Para (i,Ny,k) 1<i<Nx 1<k<Nz

0

S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
E
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (


- Para (1,j,k) 1<j<Ny 1<k<Nz

0
S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



- Para (Nx,j,k) 1<j<Ny 1<k<Nz

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



- Para (i,j,k) 1<i<Nx 1<j<Ny 1<k<Nz

S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (




- CAPA SUPERIOR

Para (1,1,Nz)

0
C
i,j,k
=[((

) ((

)
((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (Nx,1,Nz)

0
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

]
N
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (1,Ny,Nz)

0
S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

]
E
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (Nx,Ny,Nz)

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

]
AB = ((

)
F
i,j,k
= (



Para (i,1,Nz) 1<i<Nx

0

W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (i,Ny,Nz) 1<i<Nx

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
E
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (1,j,Nz) 1<j<Ny

0
S
i,j,k
= ((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (Nx,j,Nz) 1<j<Ny

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

]
N
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Para (i,j,Nz) 1<i<Nx 1<j<Ny

0
S
i,j,k
= ((

)
W
i,j,k
=((

)
C
i,j,k
=[((

) ((

)
((

) ((

) ((

]
E
i,j,k
= ((

)
N
i,j,k
= ((

)
A
i,j,k
= ((

)
AB = ((

)
F
i,j,k
= (



Solucin del sistema de ecuaciones

Para la solucin del sistema de ecuaciones, se usara las ecuaciones halladas al recorrer la malla, por el
mtodo LSOR y usando Thomas se halla las (
*
P
) intermedias se da inicio al proceso iterativo, con:

(
(

(


Si P
m+1
=P
m
, se tiene la presin de la fase aceite.
Una vez calculadas las presiones de la fase petrleo se va a la ecuacin (6.107) y de ah se
despeja
1 n
o
S
+
as:
1 1 '
10 '
11
1
o
n n n n
o o t o o t o
S S T P q C P
C
+ +
( = + A A A


La saturacin del gas al tiempo t
n+1
se calcula de
1 1
1
n n
g o
S S
+ +
=
Conocida la saturacin de Petrleo al tiempo n+1 se calcula la presin capilar a este tiempo de la
relacin disponible para presin capilar en funcin de la saturacin de petrleo o de fase lquida y
Conocida la presin capilar al tiempo t
n+1
y la presin de la fase petrleo al mismo tiempo, se puede
calcular la presin de la fase gas al tiempo t
n+1
.
DIAGRAMAS DE BLOQUES.


Leer datos
Se crea malla y se fijan condiciones iniciales
Se crea malla fantasma
Suponer Sg
Calcular Kr de curvas
Se calculan transmisibilidades
Plantear Stencils para P y S por mtodo IMPIS
Plantear Sistema de Ecuaciones para resolver
por LSOR y suponer condiciones (VN- YC)

Crear matriz heptadiagonal para P*
Resolver por Thomas para hallar P*
Suponer P
n
(&)


Aplicar LSOR y cacular P
n+1

Comparar con P
n
supuesta, converge?
SI
P
n+1
=P
n
Fase aceite

IMPRIMIR
Calcular So al tiempo n+1
Calcular Pc al tiempo n+1
Con Pc y Po se tiene Pg al tiempo n+i
IMPRIMIR
NO
P
n+1
= Pn supuesta (nueva).
Repetir desde (&)
ANEXO
ALGORITMOS (Fortlan)
MODELO COMPUTACIONAL.

DEFINICION DE VARIABLES
!*********************************************************************

!h = Espesor Yto en Pies
!LX = Longitud del yacimiento - direccin X en Pies
!LY = Longitud del yacimiento - direccin Y en Pies
!LZ = Longitud del yacimiento - direccin Z en Pies
!PW = Numero de pozos productores
!DX = longitud de los bloques - direccin X(i)
!DY = longitud de los bloques - direccin Y(j)
!DZ = longitud de los bloques - direccin Z(k)
!NPX = numero de perforaciones - direccin X(i)
!NPY = numero de perforaciones - direccin Y(j)
!NPZ = numero de perforaciones - direccin Z(k)
!KX = permeabilidad absoluta - direccin X(i)
!KY = permeabilidad absoluta - direccin Y(j)
!KZ = permeabilidad absoluta - direccin Z(k)
!MD(X) = matriz longitudes de los bloques - direccin X(i)
!MD(Y) = matriz longitudes de los bloques - direccin Y(j)
!MD(Z) = matriz longitudes de los bloques - direccin Z(k)
!MK(X) = matriz permeabilidades absoluta - direccin X(i)
!MK(Y) = matriz permeabilidades absoluta - direccin Y(j)
!MK(Z) = matriz permeabilidades absoluta - direccin Z(k)
!M(PN) = matriz Presin al tiempo n
!M(SG) = matriz saturaciones del gas
KRO = permeabilidad relativa al aceite
KRG = permeabilidad relativa al gas
!TRXOPLUSS = Transmisibilidad en direccin x para el aceite i+1/2
!TRXOLESS = Transmisibilidad en direccin x para el aceite i-1/2
!TRYOPLUSS = Transmisibilidad en direccin y para el aceite j+1/2
!TRYOLESS = Transmisibilidad en direccin y para el aceite j-1/2
!TRZOPLUSS = Transmisibilidad en direccin z para el aceite k+1/2
!TRZOLESS = Transmisibilidad en direccin z para el aceite k-1/2
!TRXGPLUSS = Transmisibilidad en direccin x para el gas i+1/2
!TRXGLESS = Transmisibilidad en direccin x para el gas i-1/2
!TRYGPLUSS = Transmisibilidad en direccin y para el gas j+1/2
!TRYGLESS = Transmisibilidad en direccin y para el gas j-1/2
!TRZGPLUSS = Transmisibilidad en direccin z para el gas k+1/2
!TRZGLESS = Transmisibilidad en direccin z para el gas k-1/2
!TRZGLESS = Transmisibilidad en direccin z para el gas k-1/2
!ES = stencils direccin y (sur) j-1/2
!EN = stencils direccin y (norte) j+1/2
!EW = stencils direccin x (oeste) i-1/2
!EE = stencils direccin x (este) i+1/2
!EA = stencils direccin z (arriba) k+1/2
!EAB = stencils direccin z (abajo) k-1/2
!EC = stencils central i,j,k
!EF = stencils trminos independientes i,j,k
!M(QG) = matriz caudales de gas
!M(QO) = matriz caudales de aceite
P(K) = presin al tiempo k
P(K1) = presin al tiempo k+1
!ES(PC) = stencils para la presin capilar direccin y (sur) para j-1/2
!EN(PC) = stencils para la presin capilar direccin y (norte) j+1/2
!EW(PC) = stencils para la presin direccin x (oeste) i-1/2
!EE(PC) = stencils para la presin capilar direccin x (este) i+1/2
!EA(PC) = stencils para la presin capilar direccin z (arriba) k+1/2
!EAB(PC) =stencils para la presin capilar direccin z (abajo) k-1/2
!EC(PC) = stencils para la presin capilar central i,j,k
!EF(PC) = stencils para la presin capilar trminos independientes i,j,k

SUBROUTINE B_Fantasmas
USE General
IMPLICIT NONE
!* MALLA IRREGULAR (VARIACION DE LA LONGITUD DE LOS BLOQUES)
DO I = 1,NX
M_DX(I,:,:) = DX(I)
END DO
DO J = 1,NY
M_DY(:,J,:) = DY(J)
END DO
DO K = 1,NZ
M_DZ(:,:,K) = DZ(K)
END DO
! *MALLA IRREGULAR (VARIACION DE LA PERMEABILIDAD)
DO I = 1,NX
M_KX(I,:,:) = KX(I)
END DO
DO J = 1,NY
M_KY(:,J,:) = KY(J)
END DO
DO K = 1,NZ
M_KZ(:,:,K) = KZ(K)
END DO

! *MALLA BLOQUES FANTASMAS (VARIACION PERMEABLIDADES)
DO J = 0,NY+1
DO K = 0,NZ+1
M_KX(0,J,K) = M_KX(1,J,K)
M_KX(NX+1,J,K)= M_KX(NX,J,K)
M_KY(0,J,K) = M_KY(1,J,K)
M_KY(NX+1,J,K)= M_KY(NX,J,K)
M_KZ(0,J,K) = M_KZ(1,J,K)
M_KZ(NX+1,J,K)= M_KZ(NX,J,K)
END DO
END DO

DO I = 0,NX+1
DO K = 0,NZ+1
M_KX(I,0,K) = M_KX(I,1,K)
M_KX(I,NY+1,K)= M_KX(I,NY,K)
M_KY(I,0,K) = M_KY(I,1,K)
M_KY(I,NY+1,K)= M_KY(I,NY,K)
M_KZ(I,0,K) = M_KZ(I,1,K)
M_KZ(I,NY+1,K)= M_KZ(I,NY,K)
END DO
END DO
DO I = 0,NX+1
DO J = 0,NY+1
M_KX(I,J,0) = M_KX(I,J,1)
M_KX(I,J,NZ+1)= M_KX(I,J,NZ)
M_KY(I,J,0) = M_KY(I,J,1)
M_KY(I,J,NZ+1)= M_KY(I,J,NZ)
M_KZ(I,J,0) = M_KZ(I,J,1)
M_KZ(I,J,NZ+1)= M_KZ(I,J,NZ)

END DO
END DO
! * MALLA BLOQUES FANTASMAS (VARIACION DE LA LONGITUDES DE LOS BLOQUES)
DO J = 0,NY+1
DO K = 0,NZ+1
M_DX(0,J,K) = M_DX(1,J,K)
M_DX(NX+1,J,K)= M_DX(NX,J,K)
M_DY(0,J,K) = M_DY(1,J,K)
M_DY(NX+1,J,K)= M_DY(NX,J,K)
M_DZ(0,J,K) = M_DZ(1,J,K)
M_DZ(NX+1,J,K)= M_DZ(NX,J,K)
END DO
END DO

DO I = 0,NX+1
DO K = 0,NZ+1
M_DX(I,0,K) = M_DX(I,1,K)
M_DX(I,NY+1,K)= M_DX(I,NY,K)
M_DY(I,0,K) = M_DY(I,1,K)
M_DY(I,NY+1,K)= M_DY(I,NY,K)
M_DZ(I,0,K) = M_DZ(I,1,K)
M_DZ(I,NY+1,K)= M_DZ(I,NY,K)

END DO
END DO
DO I = 0,NX+1
DO J = 0,NY+1
M_DX(I,J,0) = M_DX(I,J,1)
M_DX(I,J,NZ+1)= M_DX(I,J,NZ)
M_DY(I,J,0) = M_DY(I,J,1)
M_DY(I,J,NZ+1)= M_DY(I,J,NZ)
M_DZ(I,J,0) = M_DZ(I,J,1)
M_DZ(I,J,NZ+1)= M_DZ(I,J,NZ)
END DO
END DO
! * INICIALIZACION CAUDALES.
M_QO = 0.0D0
M_QG = 0.0D0
DO I=1,PW
M_QO(PW(X)(I),PW(Y)(I),PW(Z)(I)) =QP*(1-FW)
M_QW)(PW(X)(I),PW(Y)(I),PW(Z)(I)) =QP*(FW)}
END DO
END SUBROUTINE B_Fantasmas

SUBROUTINE Curvas_Kr_Pc
USE General
IMPLICIT NONE
! CURVAS DE PERMEABILIDAD DEL PETROLEO Y DEL GAS
DO I =0,NX+1
DO J =0,NY+1
DO K =0,NZ+1
KRO(I,J,K)=14.32*(M_SO_SUP(I,J,K)**4) - 26.534*(M_SO_SUP(I,J,K)**3) + &
& 18.534*(M_SO_SUP(I,J,K)**2) - 6.2752*(M_SO_SUP(I,J,K)) - 0.9691

KRG(I,J,K)=0.6125*(M_SG_SUP(I,J,K)**4) - 1.3316*(M_SG_SUP(I,J,K)**3) + &
& 1.4776*(M_SG_SUP(I,J,K)**2) - 0.2697*(M_SG_SUP(I,J,K)) - 0.0002

PCOG(I,J,K) = 1257.7*(M_SG_SUP(I,J,K)**5) - 2041.4*(M_SG_SUP(I,J,K)**4) - &
& 1233.4*(M_SG_SUP(I,J,K)**3) - 334.49*(M_SG_SUP(I,J,K)**2) + 37.937*(M_SG_SUP(I,J,K)) -
1.0247

END DO
END DO
END DO
END SUBROUTINE Curvas_Kr_Pc
SUBROUTINE Generacin_Estenciles
USE General
IMPLICIT NONE
DO I =1,NX
DO J =1,NY
DO K =1,NZ
! ESTENCIL NORTE
EN(I,J,K) = (a+(RS)(I,J+1,K)*TYOPLUS(I,J+1/2,K) + TYGPLUS(I,J+1/2,K)
! ESTENCIL SUR
ES(I,J,K) = (a+(RS))(I,J-1,K)*TYOLESS(I,J-1/2,K) + TYGLESS(I,J-1/2,K)
! ESTENCIL ESTE
EE(I,J,K) = (a+(RS))(I+1,J,K)*TXOPLUS(I + 1/2,J,K) + TXGPLUS(I + 1/2,J,K)
! ESTENCIL OESTE
EW(I,J,K) = (a+(RS))(I-1,J,K)*TXOLESS(I - 1/2,J,K) + TXGLESS(I - 1/2,J,K)
! ESTENCIL ARRIBA
EA(I,J,K) = (a+(RS)(I,J,K+1)*TZOPLUS(I,J,K+1/2) + TZGPLUS(I,J,K+1/2)
! ESTENCIL ABAJO
EAB(I,J,K) = (a+(RS)(I,J,K-1)*TZOLESS(I,J,K-1/2) + TZGLESS(I,J,K-1/2)
! ESTENCIL CENTRAL
EC(I,J,K) = -(EE(I,J,K) + EW(I,J,K) + ES(I,J,K) + EN(I,J,K) + EA(I,J,K) &
& - EAB(I,J,K)+2*M_DX(I,J,K)*M_DY(I,J,K)*M_DZ(I,J,K)*PORO/(5.615*DT))
! ESTENCIL F
EF(I,J,K)=(a*M_QG(I,J,K) + M_QO(I,J,K))-(TYGPLUS(I,J+1/2,K)*PCOG(I,J+1,K)) &
-(TYGLESS(I,J-1/2,K)*PCOG(I,J-1,K)) -(TXGPLUS(I + 1/2,J,K)*PCOG(I+1,J,K)) &
-TXGLESS(I - 1/2,J,K)*PCOG(I-1,J,K))-
(TZGPLUS(I,J,K+1/2)*PCOG(I,J,K+1)) -(TZGLESS(I,J,K-1/2)*PCOG(I,J,K-1)) &
-(TYGPLUS(I,J+1/2,K) + TYGLESS(I,J-1/2,K) + TXGLESS(I - 1/2,J,K)
&
+ TXGPLUS(I + 1/2,J,K) + TZGPLUS(I,J,K+1/2)+TZGLESS(I,J,K-
1/2)+D(I,J,K))*PCOG(I,J,K))-
(DX(I,J,K)*DY(I,J,K)*DZ(I,J,K)*PORO(RS)/(5.615*DT)*(M_PN(I,J,K))

END DO
END DO
END DO
END SUBROUTINE
MODULE General

INTEGER,PUBLIC:: NX,NY,NZ,NPP
INTEGER,PUBLIC:: I,J,K,X
INTEGER,PUBLIC,DIMENSION(:),ALLOCATABLE::NPX,NPY,NPZ
REAL*8,PUBLIC,DIMENSION(:),ALLOCATABLE::KX,KY,KZ,KB,KC
REAL*8,PUBLIC,DIMENSION(:),ALLOCATABLE::DX,DY,DZ
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: M_DY,M_DZ,M_DX
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: M_KY,M_KZ,M_KX
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: M_PN,M_SG
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: KRO,KRG,SO_CAL,M_SG_CAL,M_SO_SUP
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TXOPLUS,TXOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TYOPLUS,TYOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TZOPLUS,TZOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TRSXOPLUS,TRSXOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TRSYOPLUS,TRSYOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TRSZOPLUS,TRSZOLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TXGPLUS,TXGLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TYGPLUS,TYGLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: TZGPLUS,TZGLESS
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: ES,EN,EW,EE,EA,EAB,EC,EF
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: M_QG,M_QO,M_SG_SUP
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: P_K,P_K1
REAL*8,PUBLIC,DIMENSION(:,:,:),ALLOCATABLE:: M_PN_OLD,PCOG,RS
REAL*8,PUBLIC,DIMENSION(:),ALLOCATABLE:: BETA,GAMA
REAL*8,PUBLIC,DIMENSION(:),ALLOCATABLE:: PT,ERROR_LSOR
REAL*8, PUBLIC:: PORO,CPORO,PI,MIU_O,MIU_G,BG,BO,CG,CO,PPR,PPC,API
REAL*8, PUBLIC:: TFINAL,DT,SGI,GAMA_G,GAMA_O,QP,TPR,TPC,TEM
REAL*8, PUBLIC :: DENO, NUME,TETA,C1=0.001127,TOLERANCE_SAT,ERRORMAX_SAT
REAL*8, PUBLIC:: OMEGA,TOLERANCE,ERRORMAX,RESIDUO
INTEGER,PUBLIC:: ITERATION_LSOR,I1,I2,I3,I4,ITERATION_SAT,TTT
END MODULE General
! Oil_Gas_IMPIS_LSOR.f90
! FUNCTIONS:
! Oil_Gas_IMPIS_LSOR
!| PROGRAM: IMPIS-LSOR FLUJO PETROLEO-GAS 3D
|
!| PURPOSE: RESOLVER SISTEMA DE ECUACIONES PLANTEADAS POR EL MTODO IMPIS USANDO EL
MTODO LSOR PARA FLUJO PETRLEO-GAS 3D|

program Oil_Gas_IMPIS_LSOR
USE General
implicit none
! GENERACION MALLA GENERAL

ALLOCATE(M_DX(0:NX+1,0:NY+1,0:NZ+1),M_DY(0:NX+1,0:NY+1,0:NZ+1),M_DZ(0:NX+1,0:NY+1,0:NZ
+1))
ALLOCATE(M_KX(0:NX+1,0:NY+1,0:NZ+1),M_KY(0:NX+1,0:NY+1,0:NZ+1),M_KZ(0:NX+1,0:NY+1,0:NZ+1))
ALLOCATE(M_SG(0:NX+1,0:NY+1,0:NZ+1),KRO(0:NX+1,0:NY+1,0:NZ+1),KRG(0:NX+1,0:NY+1,0:NZ+1)
)
ALLOCATE(M_QG)(NX,NY,NZ),(M_QO)(NX,NY,NZ),(M_PN)(0:NX+1,0:NY+1,0:NZ+1))
ALLOCATE M_SG_SUP((0:NX+1,0:NY+1,0:NZ+1),SO_CALC(NX,NY,NZ))
ALLOCATE(PCOG(0:NX+1,0:NY+1,0:NZ+1))
ALLOCATE(TXOPLUS(1 + 1/2:NX + 1/2,NY,NZ),TXOLESS(1-1/2:NX - 1/2,NY,NZ))
ALLOCATE(TYOPLUS(NX,1+1/2:NY + 1/2,NZ),TYOLESS(NX,1-1/2:NY - 1/2,NZ))
ALLOCATE(TZOPLUS(NX,NY,1 + 1/2:NZ + 1/2),TZOLESS(NX,NY,1-1/2:NZ - 1/2))
ALLOCATE(TRSXOPLUS(1 + 1/2:NX + 1/2,NY,NZ),TRSXOLESS(1-1/2:NX - 1/2,NY,NZ))
ALLOCATE(TRSYOPLUS(NX,1+1/2:NY + 1/2,NZ),TRSYOLESS(NX,1-1/2:NY - 1/2,NZ))
ALLOCATE(TRSZOPLUS(NX,NY,1 + 1/2:NZ + 1/2),TRSZOLESS(NX,NY,1-1/2:NZ - 1/2))
ALLOCATE(TXGPLUS(1 + 1/2:NX + 1/2,NY,NZ),TXGLESS(1-1/2:NX - 1/2,NY,NZ))
ALLOCATE(TYGPLUSS(NX,1 + 1/2:NY + 1/2,NZ),TYGLESS(NX,1-1/2:NY - 1/2,NZ))
ALLOCATE(TZGPLUSS(NX,NY,1 + 1/2:NZ + 1/2),TZGLESS(NX,NY,1-1/2:NZ - 1/2))
ALLOCATE(M_SG_CALC(0:NX+1,0:NY+1,0:NZ+1),(M_PN_OLD(0:NX+1,0:NY+1,0:NZ+1))
ALLOCATE(ES(NX,NY,NZ),EN(NX,NY,NZ),EW(NX,NY,NZ),EF(NX,NY,NZ))
ALLOCATE(EC(NX,NY,NZ),EE(NX,NY,NZ),EA(NX,NY,NZ),EAB(NX,NY,NZ))
ALLOCATE(P_K(NX,NY,NZ),P_K1(NX,NY,NZ),ERROR_SAT_NX)
ALLOCATE(BETA)(NX),GAMA)(NX),PT_LSOR)_NX),ERROR_LSOR_NX,SFL_NX)
ALLOCATE(EN(Pc)(NX,NY,NZ),ES(Pc)(NX,NY,NZ),EE(Pc)(NX,NY,NZ))
ALLOCATE(EW(Pc)(NX,NY,NZ),EA(Pc)(NX,NY,NZ),EAB(Pc)(NX,NY,NZ),EC(Pc)(NX,NY,NZ))
MK(X)=0.0D0; MK(Y)=0.0D0; MK(Z)=0.0D0

CALL B_Fantasmas

OMEGA_LSOR = 0.5
TOLERANCE_LSOR = 0.0005
ITERATION_LSOR = 0
ERRORMAX_LSOR = 1.0
RESIDUO_LSOR = 0.0D0
TOLERANCE_SAT = 0.005
ITERATION_SAT = 0
ERRORMAX_SAT = 1.0
P_K1_LSOR = 0.0D0
P_K_LSOR = PI
! PRESIONES INICIALES
M_SG = SGI
M_PN_OLD = PI
M_PN = PI
SO_CAL = 0.0D0
EW(I,J,K)P_ast(I-1,J,Kk)+EC(I,J,K)P_ast(I,J,K)+EE(I,J,K)P_ast(I+1,J,K)=EF(I,J,K)-S(I,J,K)P_k1(I,J-1,K) &
-EN(I,J,K)P_k1(I,J+1,K)-EA(I,J,K)P_K(I,J,K+1)-EAB(I,J,K)P_K1(I,J,K-1)
!CALCULO ESTENCILES
DO K=1,NZ
DO J=1,NY
DO I=1,NX
EW(I,J,K) = (a+(RS))(I-1,J,K)*TXOLESS(I - 1/2,J,K) + TXGLESS(I - 1/2,J,K)
ES(I,J,K) = (a+(RS))(I,J-1,K)*TYOLESS(I,J-1/2,K) + TYGLESS(I,J-1/2,K)
EAB(I,J,K) = (a+(RS)(I,J,K-1)*TZOLESS(I,J,K-1/2) + TZGLESS(I,J,K-1/2)
EC(I,J,K) = -(EE(I,J,K) + EW(I,J,K) + ES(I,J,K) + EN(I,J,K) + EA(I,J,K) &
& - EAB(I,J,K)+2*M_DX(I,J,K)*M_DY(I,J,K)*M_DZ(I,J,K)*PORO/(5.615*DT))
EN(I,J,K) = (a+(RS)(I,J+1,K)*TYOPLUS(I,J+1/2,K) + TYGPLUS(I,J+1/2,K)
EE(I,J,K) = (a+(RS))(I+1,J,K)*TXOPLUS(I + 1/2,J,K) + TXGPLUS(I + 1/2,J,K)
EA(I,J,K) = (a+(RS)(I,J,K+1)*TZOPLUS(I,J,K+1/2) + TZGPLUS(I,J,K+1/2)
EF(I,J,K)=(a*M_QG(I,J,K) + M_QO(I,J,K))-(TYGPLUS(I,J+1/2,K)*PCOW(I,J+1,K)) &
-(TYGLESS(I,J-1/2,K)*PCOW(I,J-1,K)) -(TXGPLUS(I + 1/2,J,K)*PCOW(I+1,J,K)) &
-TXGLESS(I - 1/2,J,K)*PCOW(I-1,J,K))-
(TZGPLUS(I,J,K+1/2)*PCOW(I,J,K+1)) -(TZGLESS(I,J,K-1/2)*PCOW(I,J,K-1)) &
-(TYGPLUS(I,J+1/2,K) + TYGLESS(I,J-1/2,K) + TXGLESS(I - 1/2,J,K)
&
+ TXGPLUS(I + 1/2,J,K) + TZGPLUS(I,J,K+1/2)+TZGLESS(I,J,K-
1/2)+D(I,J,K))*PCOW(I,J,K))-
(DX(I,J,K)*DY(I,J,K)*DZ(I,J,K)*PORO(BG/BO)/(5.615*DT)*(M_PN(I,J,K))
END DO
END DO

END DO
!Bloques de las esquinas
EW(1,1,1)=0
ES(1,1,1)=0
EAB(1,1,1)=0
ES(NX,1,1)=0
EAB(NX,1,1)=0
EE(NX,1,1)=0
EW(1,NY,1)=0
EN(1,NY,1)=0
EAB(1,NY,1)=0
EAB(NX,NY,1)=0
EE(NX,NY,1)=0
EN(NX,NY,1)=0

EW(1,1,NZ)=0
ES(1,1,NZ)=0
EA(1,1,NZ)=0
ES(NX,1,NZ)=0
EE(NX,1,NZ)=0
EA(NX,1,NZ)=0
EW(1,NY,NZ)=0
EN(1,NY,NZ)=0
EA(1,NY,NZ)=0
EE(NX,NY,NZ)=0
EN(NX,NY,NZ)=0
EA(NX,NY,NZ)=0

!BORDES J=1 y J=NY
DO Y=2,NX-1
ES(I,1,1)=0
EA(I,1,1)=0

EN(I,NY,1)=0
EAB(I,NY,1)=0

ES(I,1,NZ)=0
EA(I,1,NZ)=0
EN(I,NY,NZ)=0
EA(I,NY,NZ)=0
END DO
!BORDES I=1 e I=NX
DO J=2,NY-1

EW(1,J,1)=0
EAB(1,J,1)=0
EE(NX,J,1)=0
EAB(NX,J,1)=0
EW(1,J,NZ)=0
EA(1,J,NZ)=0
EE(NX,J,NZ)=0
EA(NX,J,NZ)=0
END DO
!Bloques internos K=1 y K=NZ
DO J=2,NY-1
DO I=2,NX-1
EAB(I,J,1)=0
EA(I,J,NZ)=0
END DO
END DO
!Bloques internos J=1 y J=NY
DO K=2,NZ-1
DO I=2,NX-1
ES(I,1,K)=0
EN(I,NY,K)=0
END DO
END DO
!Bloques internos I=1 e I=NX

DO K=2,NZ-1
DO J=2,NY-1
EW(1,J,K)=0
EE(NX,J,K)=0
END DO
END DO
! ALGORITMO DE THOMAS WP
DO K = 1, NZ
DO J = 1,NY
DO I = 1,NX
EFL(I) = EF(I,J,K)
END DO
BETA(1) = EE(1,J,K)/EC(1,J,K)
GAMA(1) = EFL(1)/EC(1,J,K)
DO I1 = 2, NX
BETA(I1) = EE(I1,J,K)/(EC(I1,J,K)-EW(I1,J,K)*BETA(I1-1))
GAMA(I1) = (EFL(I1)-EW(I1,J,K)*GAMA(I1-1))/(EC(I1,J,K)-
EG(I1,J,K)*BETA(I1-1))
END DO
PT(NX) = GAMA(NX)
DO I2 = NX-1, 1, -1
PT(I2) = GAMA(I2) - BETA(I2)*PT(I2+1)
END DO
DO I3 = 1, NX
P_K1(I3,J,K) = (1-OMEGA)*P_K(I3,J,K) + PT(I3)*OMEGA
END DO
DO I4 = 1, NX
ERROR(I4) = ABS((P_K1(I4,J,K)-P_K(I4,J,K)))
END DO
ERRORMAX = MAXVAL(ERROR)

IF (ERRORMAX .EQ. 0.0) THEN
ERRORMAX = 1.0
END IF
RESIDUO = ERRORMAX
END DO
END DO
ITERATION = ITERATION
P_K= P_K1
! CALCULO SATURACION
DO K = 1, NZ
DO J = 1,NY
DO I = 1,NX

SG_CALC(I,J,K) = (1-M_SO(I,J,K)) - ((TYOPLUS(I,J+1/2,K)*M_PN(I,J+1,K) + TYOLESS(I,J-
1/2,K)*M_PN(I,J-1,K) + &
& TXOPLUS(I+1/2,J,K)*M_PN(I+1,J,K) + TXOLESS(I-1/2,J,K)*M_PN(I-1,J,K) + &
& TZOPLUS(I,J,K+1/2)*M_PN(I,J,K+1) + TZOLESS(I,J,K-1/2)*M_PN(I,J,K-1) - &
& -((TYOPLUS(I,J+1/2,K) + TYOLESS(I,J-1/2,K) + TXOPLUS(I+1/2,J,K) +TXOLESS(I-
1/2,J,K) &
& + TZOPLUS(I,J,K+1/2) + TZOLESS(I,J,K-1/2))*M_PN(I,J,K)) - &
& 2*M_QO(I,J,K) )*(2*DT/(M_DY(I,J,K)*M_DX(I,J,K)*M_DZ(I,J,K)))

END DO
END DO
END DO
! ITERACION SATURACIONES
DO K = 1, NZ
DO J = 1,NY
DO I = 1,NX
ERROR_SAT(I) = ABS((M_SG_CALC(I,J,K)-M_SG(I,J,K)))
ERRORMAX_SAT = MAXVAL(ERROR_SAT)
IF (ERRORMAX_SAT .EQ. 0.0) THEN
ERRORMAX_SAT = 1.0
END IF
END DO
END DO
END DO

ITERATION_SAT = ITERATION_SAT + 1
IF (ERRORMAX_LSOR > TOLERANCE_LSOR) THEN
M_PN = M_PN_OLD
P_K = M_PN_OLD
M_SG_SUP = MAT_SG_CALC
END IF
END DO
PAUSE
end program Oil_Gas_IMPIS_LSOR
SUBROUTINE PVT
USE General
IMPLICIT NONE
! CALCULO DE PROPIEDADES A LA PRESION SUPUESTA.
TPC = 187 + 330*GAMA_G - 71.5*(GAMA_G**2)
PPC = 706 - 51.7*GAMA_G - 11.1*(GAMA_G**2)
TPR = TEM/TPC
KA =((9.379+0.01607*29*GAMA_G)*(TEM**1.5))/(209.2 + 19.26*29*GAMA_G + TEM)
KB =3.448 +986.14/TEM +0.01009*29*GAMA_G
KC=2.447 - 0.224*KB
DO I=0,NX+1
DO J=0,NY+1
DO K=0,NZ+1
! STANDING CORRELATIONS
PPR(I,J,K) = P(I,J,K)/PPC
Z(I,J,K) = PPR(I,J,K)*(-0.0284*TPR + 0.0625) + 0.4714*TPR - 0.0011
BG(I,J,K) = (14.7*Z(I,J,K)*TEM)/(520*P(I,J,K))
DG(I,J,K)=(PPR(I,J,K)*29*GAMA_G)/(Z(I,J,K)*10.73*TEM)
! CORRELATION GLASO
UG(I,J,K)=0.0001*KA*((EXP)**(KB*(DG(I,J,K)**KC)))

END DO
END DO
END DO
! CALCULO DE LAS PROPIEDADES INICIALES
API = (141.5/GAMA_O) - 131.5
DO I=0,NX+1
DO J=0,NY+1
DO K=0,NZ+1
! STANDING
X = 0.0125*API - 0.00091*(TEM-460)
RS(I,J,K)=GAMA_G*((((PI/18.2) + 1.4)*(10**X) )**1.2048)
END DO
END DO
END DO
END SUBROUTINE PVT
!************************************************************************
! CALCULO DE TRANSMISIBILIDADES DEL ACEITE CON GAS EN SOLUCIN EN EL EJE X
DO I =1,NX-1
DO J =1,NY
DO K = 1,NZ
NUM=
2*0.001127*M_DY(I,J,K)*M_DZ(I,J,K)*M_KBX(I,J,K)*M_KBX(I+1,J,K)*KRO(I+1,J,K)*KRO(I,J,K)
DEN= BO*MIU_O*M_DX(I,J,K)*(M_KBX(I,J,K)*KRO(I,J,K) +
M_KBX(I+1,J,K)*KRO(I+1,J,K))
TRSXOPLUS(I + 1/2,J,K)=(NUM/DEN)*RS
END DO
END DO
END DO
DO I =2,NX
DO J =1,NY
DO K = 1,NZ
NUM= 2*0.001127*M_DY(I,J,K)*M_DZ(I,J,K)*M_KBX(I,J,K)*M_KBX(I-1,J,K)*KRO(I-
1,J,K)*KRO(I,J,K)
DEN= BO*MIU_O*M_DX(I,J,K)*(M_KBX(I,J,K)*KRO(I,J,K) + M_KBX(I-1,J,K)*KRO(I-
1,J,K))
TRSXOLESS(I - 1/2,J,K)=(NUM/DEN)*RS
END DO
END DO
END DO

!************************************************************************
!CALCULO DE TRANSMISIBILIDADES DEL ACEITE CON GAS EN SOLUCIN EN EL EJE Y
!************************************************************************
DO K = 1,NZ
DO I =1,NX
DO J =1,NY-1
NUM=
2*0.001127*M_DX(I,J,K)*M_DZ(I,J,K)*M_KBY(I,J,K)*M_KBY(I,J+1,K)*KRO(I,J+1,K)*KRO(I,J,K)
DEN= BO*MIU_O*M_DY(I,J,K)*(M_KBY(I,J,K)*KRO(I,J,K) +
M_KBY(I,J+1,K)*KRO(I,J+1,K))
TRSYOPLUS(I,J+1/2,K)=(NUM/DEN)*RS
END DO
END DO
END DO
DO I =1,NX
DO J =2,NY
DO K = 1,NZ
NUM= 2*0.001127*M_DX(I,J,K)*M_DZ(I,J,K)*M_KBY(I,J,K)*M_KBY(I,J-
1,K)*KRO(I,J-1,K)*KRO(I,J,K)
DEN= BO*MIU_O*M_DY(I,J,K)*(M_KBY(I,J,K)*KRO(I,J,K) + M_KBY(I,J-1,K)*KRO(I,J-
1,K))
TRSYOLESS(I,J-1/2,K)=(NUM/DEN)*RS
END DO
END DO
END DO
!************************************************************************
!CALCULO DE TRANSMISIBILIDADES DEL ACEITE CON GAS EN SOLUCIN EN EL EJE Z
!************************************************************************
DO I =1,NX
DO J =1,NY
DO K = 1,NZ-1
NUM=
2*0.001127*M_DX(I,J,K)*M_DY(I,J,K)*M_KBZ(I,J,K)*M_KBZ(I,J,K+1)*KRO(I,J,K+1)*KRO(I,J,K)
DEN= BO*MIU_O*M_DZ(I,J,K)*(M_KBZ(I,J,K)*KRO(I,J,K) +
M_KBZ(I,J,K+1)*KRO(I,J,K+1))
TRSZOPLUS(I,J,K+1/2)=(NUM/DEN)*RS
END DO
END DO
END DO
DO I =1,NX
DO J =1,NY
DO K = 2,NZ
NUM= 2*0.001127*M_DX(I,J,K)*M_DY(I,J,K)*M_KBZ(I,J,K)*M_KBZ(I,J,K-
1)*KRO(I,J,K-1)*KRO(I,J,K)
DEN= BO*MIU_O*M_DZ(I,J,K)*(M_KBZ(I,J,K)*KRO(I,J,K) + M_KBZ(I,J,K-
1)*KRO(I,J,K-1))
TRSZOLESS(I,J,K-1/2)=(NUM/DEN)*RS
END DO
END DO
END DO
!*************************************************
!CALCULO DE TRANSMISIBILIDADES DEL GAS EN EL EJE X
!*************************************************
DO I =1,NX-1
DO J =1,NY
DO K = 1,NZ
NUM=
2*0.001127*M_DY(I,J,K)*M_DZ(I,J,K)*M_KBX(I,J,K)*M_KBX(I+1,J,K)*KRG(I+1,J,K)*KRG(I,J,K)
DEN= BG*MIU_G*M_DX(I,J,K)*(M_KBX(I,J,K)*KRG(I,J,K) +
M_KBX(I+1,J,K)*KRG(I+1,J,K))
TXGPLUS(I + 1/2,J,K)= NUM/DEN
END DO
END DO
END DO
DO I =2,NX
DO J =1,NY
DO K = 1,NZ
NUM= 2*0.001127*M_DY(I,J,K)*M_DZ(I,J,K)*M_KBX(I,J,K)*M_KBX(I-1,J,K)*KRG(I-
1,J,K)*KRG(I,J,K)
DEN= BG*MIU_G*M_DX(I,J,K)*(M_KBX(I,J,K)*KRG(I,J,K) + M_KBX(I-1,J,K)*KRG(I-
1,J,K))
TXGLESS(I - 1/2,J,K)= NUM/DEN
END DO
END DO
END DO
!*************************************************
!CALCULO DE TRANSMISIBILIDADES DEL GAS EN EL EJE Y
!*************************************************
DO I =1,NX
DO J =1,NY-1
DO K = 1,NZ
NUM=
2*0.001127*M_DX(I,J,K)*M_DZ(I,J,K)*M_KBY(I,J,K)*M_KBY(I,J+1,K)*KRG(I,J+1,K)*KRG(I,J,K)
DEN= BG*MIU_G*M_DY(I,J,K)*(M_KBY(I,J,K)*KRG(I,J,K) +
M_KBY(I,J+1,K)*KRG(I,J+1,K))
TYGPLUS(I,J+1/2,K)= NUM/DEN
END DO
END DO
END DO
DO I =1,NX
DO J =2,NY
DO K = 1,NZ
NUM= 2*0.001127*M_DX(I,J,K)*M_DZ(I,J,K)*M_KBY(I,J,K)*M_KBY(I,J-
1,K)*KRG(I,J-1,K)*KRG(I,J,K)
DEN= BG*MIU_G*M_DY(I,J,K)*(M_KBY(I,J,K)*KRG(I,J,K) + M_KBY(I,J-1,K)*KRG(I,J-
1,K))
TYGLESS(I,J-1/2,K)= NUM/DEN
END DO
END DO
END DO
!*************************************************
!CALCULO DE TRANSMISIBILIDADES DEL GAS EN EL EJE Z
!*************************************************
DO I =1,NX
DO J =1,NY
DO K = 1,NZ-1
NUM=
2*0.001127*M_DX(I,J,K)*M_DY(I,J,K)*M_KBZ(I,J,K)*M_KBZ(I,J,K+1)*KRG(I,J,K+1)*KRG(I,J,K)
DEN= BG*MIU_G*M_DZ(I,J,K)*(M_KBZ(I,J,K)*KRG(I,J,K) +
M_KBZ(I,J,K+1)*KRG(I,J,K+1))
TZGPLUS(I,J,K+1/2)= NUM/DEN
END DO
END DO
END DO
DO I =I,NX
DO J =1,NY
DO K = 2,NZ
NUM= 2*0.001127*M_DX(I,J,K)*M_DY(I,J,K)*M_KBZ(I,J,K)*M_KBZ(I,J,K-
1)*KRG(I,J,K-1)*KRG(I,J,K)
DEN= BG*MIU_G*M_DZ(I,J,K)*(M_KBZ(I,J,K)*KRG(I,J,K) + M_KBZ(I,J,K-
1)*KRG(I,J,K-1))
TYGLESS(I,J,K-1/2)= NUM/DEN
END DO
END DO
END DO
END SUBROUTINE Transmisibilidades

Вам также может понравиться