Você está na página 1de 30

Simulador IMPIS Simultaneo, flujo Bidimensional multifsico

(Agua y gas) por mtodo de solucin iterativo LSOR


Two-dimensional simulator IMPIS Simultaneous, multiphase flow
(water and gas) by iterative solution method LSOR
JUAN GARCIA
Estudiante Ingeniera de petrleos, Universidad Nacional de Colombia, juadgarciagom@unal.edu.co

JAIME ORDOEZ
Estudiante Ingeniera de petrleos, Universidad Nacional de Colombia, jeordonezp@unal.edu.co

CARLOS ORTIZ
Estudiante Ingeniera de petrleos, Universidad Nacional de Colombia, caortizpi@unal.edu.co

RESUMEN: El modelo de simulacin de yacimientos es una herramienta con la cual se puede representar el
comportamiento real del yacimiento, modelar el flujo de fluidos a travs del espacio poroso y tener una mejor
planificacin de las actividades y estrategias necesarias para lograr una explotacin exitosa en los campos.
En este trabajo se presenta la simulacin de un yacimiento cerrado, que representa el flujo bidimensional de un fluido
multifsico (Agua y Gas) y muestra cmo se da la distribucin de presiones a distintos tiempos. Se explicara el
modelo fsico, el modelo matemtico, el modelo numrico y por ltimo el modelo computacional usando esquema
IMPIS simultneo y el mtodo de solucin iterativo LSOR.

PALABRAS CLAVE: Fluido multifasico, IMPIS, LSOR, Espacio poroso, Simulacin de yacimientos.

ABSTRACT: Reservoir simulation is a tool that can represent the actual reservoir behavior, modeling fluid flow
through the pore space and have better planning of activities and strategies needed for successful operation in the
fields . In this paper it is working with the simulation of a closed reservoir, which represents the two-dimensional
flow of a multiphase fluid (water and gas) and shows how the pressure distribution at different times. The physical
model, the mathematical model, the numerical model and finally the computational model are explained, using
simultaneous IMPIS scheme and method of iterative solution LSOR.

KEYWORDS: Multiphase fluid, IMPIS, LSOR, Pore space, Reservoir simulation.

1. INTRODUCCIN
La industria petrolera desarrolla continuamente mecanismos que le permiten optimizar los procesos que se
llevan a cabo durante la explotacin de los yacimientos de hidrocarburos. Conocer las caractersticas
fsicas y composicionales de un yacimiento son factores que contribuyen a realizar una apreciacin acerca
de la productividad esperada. a pesar de lo difcil que puede resultar el conocer con exactitud las
dimensiones y dems variables de un yacimiento, el uso de aproximaciones permiten una caracterizacin
de la zona que ayuda significativamente en la prediccin de condiciones futuras.

2. MODELO FSICO
A continuacin se muestra el modelo fsico tomado para la simulacin. El programa simulara el
comportamiento de un yacimiento con dos tipos de fluidos (gas-agua) en dos dimensiones con las
siguientes caractersticas.

1
Figura 1. Diagrama malla a trabajar en 3D

Tabla 1. Informacin general de la malla


Numero de bloques en X 13
Numero de Bloques en Y 14
Total Bloques 182
Tolerancia 0,0006
Dt (das) 0,01
Espesor del bloque en direccin X (ft)
1 2 3 4 5 6 7 8 9 10 11 12 13
175 140 115 180 200 130 135 140 165 100 165 305 215
Espesor del bloque en direccin Y (ft)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
265 160 105 120 130 115 135 135 160 175 155 240 315 280

Tabla 2. Profundidad de cada bloque (ft)


1 2 3 4 5 6 7 8 9 10 11 12 13
1 3105 3105 3105 3105 3105 3105 3105 3105 3105 3105 3105 3105 3105
2 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113 3113
3 3121 3121 3121 3121 3121 3121 3121 3121 3121 3121 3121 3121 3121
4 3130 3130 3130 3130 3130 3130 3130 3130 3130 3130 3130 3130 3130
5 3138 3138 3138 3138 3138 3138 3138 3138 3138 3138 3138 3138 3138
6 3147 3147 3147 3147 3147 3147 3147 3147 3147 3147 3147 3147 3147
7 3155 3155 3155 3155 3155 3155 3155 3155 3155 3155 3155 3155 3155
8 3180 3180 3180 3180 3180 3180 3180 3180 3180 3180 3180 3180 3180
9 3205 3205 3205 3205 3205 3205 3205 3205 3205 3205 3205 3205 3205
10 3222 3222 3222 3222 3222 3222 3222 3222 3222 3222 3222 3222 3222
11 3239 3239 3239 3239 3239 3239 3239 3239 3239 3239 3239 3239 3239
12 3255 3255 3255 3255 3255 3255 3255 3255 3255 3255 3255 3255 3255
13 3280 3280 3280 3280 3280 3280 3280 3280 3280 3280 3280 3280 3280
14 3305 3305 3305 3305 3305 3305 3305 3305 3305 3305 3305 3305 3305

Tabla 3. Permeabilidad (mD) en la direcciones x y y para cada bloque


1 2 3 4 5 6 7 8 9 10 11 12 13
1 9,745 10,064 5,802 0,713 3,096 9,427 4,562 5,402 6,526 4,881 7,354 1,149 3,815
2 6,663 10,642 13,295 26,266 7,136 6,760 3,016 6,060 6,440 3,915 7,665 6,950 6,979
3 8,087 5,946 7,554 25,202 47,939 3,896 5,046 4,755 2,907 7,230 7,358 4,975 1,557
4 21,180 8,429 9,860 23,673 52,497 38,392 7,796 5,561 4,427 7,135 5,981 4,617 4,368
5 17,836 15,609 12,632 14,837 45,727 33,562 14,718 3,692 2,836 5,285 2,064 4,858 3,095

2
6 14,846 10,591 13,292 8,636 28,780 18,174 11,643 3,822 1,580 7,059 5,965 4,930 6,492
7 7,230 8,532 4,200 3,213 9,385 12,124 12,300 9,362 1,458 7,517 8,638 9,369 3,563
8 5,542 2,720 6,924 9,969 6,189 7,528 10,930 6,095 3,570 2,881 9,221 6,469 6,482
9 6,212 4,760 3,222 1,912 6,371 8,244 9,079 3,696 4,697 2,234 7,177 4,553 6,838
10 3,644 2,686 5,167 2,067 5,954 4,702 5,103 3,178 4,604 7,555 5,996 2,131 3,888
11 1,463 5,896 5,865 8,715 7,116 4,533 6,431 7,960 6,378 2,901 2,723 4,791 5,481
12 4,830 4,846 5,743 5,872 3,537 4,566 4,502 6,088 5,752 5,208 4,768 7,308 3,342
13 4,284 4,242 6,586 6,223 4,075 4,456 4,884 4,207 6,778 6,597 4,637 4,991 2,972
14 4,968 5,299 8,014 5,601 3,906 3,474 6,235 4,447 6,582 3,432 3,701 5,591 4,395

Tabla 4. Informacin de los pozos


Numero de Pozos 5
Ubicacin Pozo 1 Bloque (2,2)
Ubicacin Pozo 2 Bloque (2,13)
Ubicacin Pozo 3 Bloque (7,9)
Ubicacin Pozo 4 Bloque (12,2)
Ubicacin Pozo 5 Bloque (12,13)
Presin de Fondo Pozo 1 (psi) 1500 Pwf
Presin de Fondo Pozo 2 (psi) 1500 Pwf
Tasa de Inyeccin Pozo 3 (Bbl/d) 1000 Qwsc
Presin de Fondo Pozo 4 (psi) 1500 Pwf
Presin de Fondo Pozo 5 (psi) 1500 Pwf

3. MODELO MATEMTICO

A partir de la ecuacin de difusividad:

( )
( ) (1)

Dada en unidades prcticas, y teniendo en cuenta que es igual al espesor de la formacin debido a que
hay flujo en dos dimensiones.

3.1. Fases

3.1.1. Fase agua


Partiendo de la ecuacin de difusividad y llevndola en trminos para el agua con flujo en dos
dimensiones tenemos:

( ) ( ) ( ) ( ) (2)

Dnde:

Permeabilidad del agua en direccin del eje ( ).


Permeabilidad del agua en direccin del eje ( ).
Espesor del yacimiento ( ).
Viscosidad del agua ( ).

3
Termino potencial del agua (presin y potencial) ( ).
Porosidad.
Saturacin de la fase agua.
Factor volumtrico de formacin de agua ( ).

3.1.2. Fase gas


Partiendo de la ecuacin de difusividad y llevndola en trminos para el gas con flujo en dos dimensiones
tenemos:

( ) ( ) ( ) ( ) (3)

Dnde:
Permeabilidad del gas en direccin del eje ( ).
Permeabilidad del gas en direccin del eje ( ).
Espesor del yacimiento ( ).
Viscosidad del gas ( ).
Termino potencial del gas (presin y potencial) ( ).
Porosidad.
Saturacin de la fase gas.
Factor volumtrico de formacin de agua ( ).

3.2. Condiciones limite


Para el desarrollo de este simulador se considera un yacimiento cerrado, suponiendo la ausencia de flujo
sobre los lmites del yacimiento, es decir no hay variacin de presin en estas reas, dicha condicin se
ajusta a la tipo Von Neumann.

3.2.1. Fase agua

Tabla 5. Condiciones lmite para la fase agua en direccin del eje x.


En

( ) ( )

Tabla 6. Condiciones lmite para la fase agua en direccin del eje y.


En

( ) ( )

3.2.2. Fase gas

4
Tabla 7. Condiciones lmite para la fase gaseosa en direccin del eje x.
En

( ) ( )

Tabla 8. Condiciones lmite para la fase gaseosa en direccin del eje y.


En

( ) ( )

3.3. Condiciones iniciales

Tabla 9. Datos del yacimiento.

Porosidad 0,13
Compresibilidad de Poro (1/psi)
Presin de Referencia (psi) 14,7
Presin Inicial (psi) 3100
Saturacin Inicial de Gas (Sg) 0,3

3.4. Permeabilidades relativas


Tabla 10. Datos de curvas Kr, Sg, Pc.
Sg Krg Krw Pcgw
0,05 0,0000 1,0000 0,9000
0,06 0,0001 0,7351 0,9850
0,10 0,0010 0,5314 1,0047
0,15 0,0034 0,3772 1,0512
0,20 0,0080 0,2621 1,0512
0,25 0,0156 0,1780 1,1450
0,30 0,0270 0,1177 1,2031
0,35 0,0429 0,0754 1,3197
0,40 0,0640 0,0467 1,3268
0,45 0,0911 0,0277 1,4952
0,50 0,1250 0,0156 1,5192
0,55 0,1664 0,0083 1,9152
0,60 0,2160 0,0041 2,1388
0,65 0,2746 0,0018 2,2988
0,70 0,3430 0,0007 2,8567
0,75 0,4219 0,0002 3,1660
0,80 0,5120 0,0001 3,7878
0,85 0,6141 0,0000 4,6857
0,90 0,7290 0,0000 6,0544
0,95 0,8574 0,0000 9,5836
0,98 1,0000 0,0000 40,000

5
3.5. Propiedades PVT

Tabla 11. Informacin de los fluidos presentes.


Densidad del Gas SC 0,064144
(lb/ft3)
Densidad del Agua SC 59,0277
(lb/ft3)
Pr (psi) Bg Bw Vg Vw
14,6960 0,245497000 1,064530 0,013502 0,227449
367,050 0,009519910 1,063117 0,013870 0,228253
719,4030 0,004714600 1,061707 0,014461 0,229063
1071,760 0,003082770 1,060301 0,015232 0,229879
1424,110 0,002271610 1,058899 0,016175 0,230701
1776,460 0,001794620 1,057501 0,017280 0,231528
2128,820 0,001486670 1,056106 0,018529 0,232361
2481,170 0,001275630 1,054715 0,019892 0,233201
2833,520 0,001124660 1,053328 0,021339 0,234046
3185,880 0,001012940 1,051944 0,022838 0,234898
3538,230 0,000927850 1,050564 0,024363 0,235756
3890,590 0,000861430 1,049188 0,025892 0,236620
4242,940 0,000808434 1,047815 0,027410 0,237491
4595,290 0,000765339 1,046446 0,028907 0,238368
4947,650 0,000729698 1,045080 0,030374 0,239251
5300,000 0,000699775 1,043718 0,031808 0,240141
5440,000 0,000689185 1,043177 0,032367 0,240497
5580,000 0,000679232 1,042638 0,032921 0,240853
5720,000 0,000669864 1,042099 0,033469 0,241211
5860,000 0,000661026 1,041560 0,034011 0,241569
6000,000 0,000652682 1,041022 0,034548 0,241929

4. MODELO NUMRICO

Se procede a realizar la discretizacin espacial y temporal de yacimiento

4.1 Discretizacin Espacial

Con series de Taylor una funcin puede ser expandida en torno al punto a, mediante la siguiente serie
infinita:
( )
(4)
( ) ( )

Partiendo de la ecuacin de difusividad

( )
( ) (9)

La ecuacin de difusividad en coordenadas cartesianas para flujo en dos dimensiones queda de la siguiente
manera:

6
( )
( ) ( )
(10)

Expandiendo la ecuacin anterior en diferencias finitas se tiene:

( ) ( ) ( ) ( )
( ) (11)

( ) ( ) ( ) ( )
( ) (12)

Sabiendo que:

( ) ( )
( ) ( ) (13)

( ) ( )
( ) ( ) (14)

4.2 Discretizacin Temporal

Utilizando la aproximacin implcita se tiene:

(15)

Ahora se procede a expandir la ecuacin en trminos de transmisibilidades, para la parte gaseosa y acuosa.

4.2.1 Fase gaseosa


{ [( ) ( )]} *( ) ( ) + (16)

4.2.2 Fase acuosa

{ [( ) ( )]} [( ) ( ) ]
(17)

Dnde:

7
( ) ( ) (18)

Como lo anterior es un sistema de dos ecuaciones con cuatro incognitas se plantean las siguientes
ecuaciones auxiliares:

(19)

El procedimiento de aproximacin IMPIS (Implicite Pressure Implicite Saturation) propone expresar las
ecuaciones de flujo en funcin de la presin de una de sus fases. Aplicando las ecuaciones auxiliares a las
ecuaciones (16), (17) y despejando en trminos de Pw y Sg:

4.2.3 Fase gaseosa reemplazo ecuaciones auxiliares


{ [( ) ( ) ( )]}
(20)

*( ) ( ) +
4.2.4 Fase acuosa reemplazo ecuaciones auxiliares

{ [( ) ( )]}
(21)

*( ( ) ) ( ( ) ) +

Expandiendo el trmino de acumulacin:

(22)
( )
Teniendo:

( ) ( ) ( ) (23)

Aplicando lo anterior al trmino de acumulacin se tiene:

(24)
( ) * ( )( ) ( ) ( )+

Anlogamente para la fase acuosa se tiene:

(25)
( ) [ ( )(( ) ( ) ) ( ) ( )]

De esta manera se obtiene ampliado el sistema y reducido a dos incgnitas.

Definiendo:

8
(26)
( )

(27)
( )

(28)
(( ) ( ) )

( )
(29)

Los trminos de presin capilar, se pueden expresar en trminos de:

( ) (30)

Donde

(31)

Aplicando las ecuaciones (25-31) las ecuaciones tanto para gas como para la fase acuosa en diferencias
finitas quedan:

4.2.5 Fase gaseosa diferencias finitas


( ) ( )
(32)

( )

4.2.6 Fase acuosa diferencias finitas

( )
(33)

( )

4.3 Esquema de solucin

Para resolver las ecuaciones descritas anteriormente se debe plantear un sistema de ecuaciones y
solucionarlo por algn mtodo de solucin que ser descrito posteriormente. El sistema de solucin
simultneo propone solucionar el sistema de ecuaciones de la siguiente forma, este sistema puede ser
escrito de la siguiente forma: [ ]

9
Dnde:

[ ] [ ] [ ]
[ ] [ ] [ ] [ ]

[ ] [ ] [ ] [ ] [ ] [ ]

[ ] [ ] [ ] [ ] [ ]
[ ]

[ ] * + (34)

[ ] * + (35)

[ ] * + (36)

[ ] * + (37)

[ ]
( )

( (38)
( ) )
[ ]

( ( ) ( ) ( )

( ) )
[ ] (39)
( ( ) ( ) ( )

( ) )
[ ]

[ ] * +

(40)

10
5. METODO DE SOLUCION

5.1 Mtodo de LSOR (Aziz y Settari 1979)

En el mtodo de LSOR el yacimiento es visto como un conjunto de lneas. Estas lneas son usualmente
alineadas en direccin de la transmisibilidad ms alta y son tomadas en orden, una lnea a la vez. Por
ejemplo, para un yacimiento en 2D teniendo la transmisibilidad ms alta a travs de la direccin X, las
lneas son tomadas paralelas al eje X. luego esta lneas son tomadas en orden, una a la vez para
j=1,2,3,., . Primero, las ecuaciones de todos los bloques en una lnea dada son escritos. A los valores
de la lnea anterior se les asigna la iteracin actual (v+1) y aquellos valores de la siguiente lnea se les
asigna la iteracin anterior v. de igual manera los valores desconocidos de la lnea actual se les asigna la
iteracin actual (v+1).

Las ecuaciones para una lnea actual j (columna) son escritas de la siguiente forma:
( ) ( ) ( ) ( ) ( ) (41)

Luego las ecuaciones resultantes para la lnea actual son resueltas simultneamente usando un mtodo de
solucin secundario en este caso se usar el mtodo de solucin directa eliminacin de Gauss.

Por ltimo la solucin obtenida es acelerada usando un parmetro de aceleracin

( ) ( ) ( )
( ) (42)

5.2 Balance de Materiales

Permite validar la solucin que se est obteniendo a un tiempo dado del sistema de ecuaciones que
describe el comportamiento del yacimiento. Por lo tanto el simulador para cada paso de tiempo debe
cumplir:

*( ) ( ) +
| | (43)
| |

6. DIAGRAMA DE FLUJO

11
Si

No
No

Si

Figura 2: Diagrama de flujo principal

No

Si

Figura 3: Diagrama de flujo evaluacin criterio EBM

12
No

Si

Figura 4: Diagrama de flujo criterio saturacin

No

Si

Figura 5: Diagrama de flujo iteracin presin

13
7. RESULTADOS

A continuacin se muestra la tabla con presiones y saturaciones de la primera iteracin es decir a un


tiempo de 0.001 dias ms, el error calculado para la presin cumple con los criterios de tolerancia, con el
error para la saturacin no se logr dicho criterio. El EBM no mejoro a pesar de usar diferentes Dt, Los
pozos productores se sealan en color verde, los Pozos inyectores con color amarillo.
No se pudo lograr realizar la simulacin durante unos aos, debido a que el tiempo que le tomaba al
algoritmo hacerlo era demasiado grande, Tanto que no se pudo ni siquiera llegar al primer da. Se cree que
se cometieron errores que llevo a que el simulador no funcione de forma correcta.
Tabla 12. Presiones y saturaciones a la primera iteracin dt=0.001
3471,185 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18 3471,18
2176,472 2174,75 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2175,35
1480,793 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79 1480,79
1672,292 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29 1672,29
1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14 1799,14
1608,634 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63 1608,63
1862,347 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35
1862,347 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35 1862,35
2176,472 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47 2176,47
2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63 2363,63
2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88 2113,88
3165,822 3164,08 3165,82 3165,82 3165,82 3165,82 3165,82 3165,82 3165,82 3165,82 3165,82 3165,82 3164,69
4077,659 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66 4077,66
3653,684 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68 3653,68

0,281593 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159 0,28159
0,172559 0,17257 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256
0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408 0,11408
0,130123 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012 0,13012
0,140778 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078 0,14078
0,124783 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478 0,12478
0,146095 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609
0,146095 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609 0,14609
0,172559 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256 0,17256
0,188343 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834 0,18834
0,167281 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728 0,16728
0,255939 0,25595 0,25594 0,25594 0,25594 0,25594 0,25594 0,25594 0,25594 0,25594 0,25594 0,25594 0,25595
0,332334 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233 0,33233
0,296894 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689 0,29689

14
8. ANEXOS

Codigo del simulador realizado en el software MATLAB

clear
clc
Dz=300; %Espesor de los bloques en z (ft)%
rw=0.1875;%Radio del pozo para el calculo del cauldal de produccion%
s=5;% s skin del pozo para el calculo del caudal de produccion%

% Se llama a la funcion leerdatos2 %


[Numbloqx,Numbloqy,Dx,Dy,Kx,Ky,phi,c,pref,z,pinicial,sginicial,dt,tol,curvkr,deng,denw,pvt,numpoz,ub
p1,ubp2,ubp3,ubp4,ubp5,pwf1,pwf2,q3,pwf4,pwf5] = leerdatos2 ();

%Calculamos el volumen para cada bloque%


for i=1:Numbloqy
for j=1:Numbloqx
Vol(i,j)=Dx(j)*Dy(i)*Dz;
end
end

%Calculamos el area de flujo en direccion x%


for i=1:Numbloqy;
Ax(i)=Dz*Dy(i);
end

%Calculamos el area de flujo en direcion y%


for i=1:Numbloqx;
Ay(i)=Dz*Dx(i);
end

%Calculamos Kh para los 4 pozos productores 1,2,4,5%


KH1=(Kx(ubp1(1),ubp1(2))*Ky(ubp1(1),ubp1(2)))^0.5;
KH2=(Kx(ubp2(1),ubp2(2))*Ky(ubp2(1),ubp2(2)))^0.5;
KH4=(Kx(ubp4(1),ubp4(2))*Ky(ubp4(1),ubp4(2)))^0.5;
KH5=(Kx(ubp5(1),ubp5(2))*Ky(ubp5(1),ubp5(2)))^0.5;

%Calculamos req para los 4 pozos productores 1,2,4,5%


req1=0.28*(((((Ky(ubp1(1),ubp1(2))/Kx(ubp1(1),ubp1(2)))^0.5)*(Dx(ubp1(1)))^2)+(((Kx(ubp1(1),ubp1(2
))/Ky(ubp1(1),ubp1(2)))^0.5)*(Dy(ubp1(2)))^2))^0.5)/(((Ky(ubp1(1),ubp1(2))/Kx(ubp1(1),ubp1(2)))^0.25
)+((Kx(ubp1(1),ubp1(2))/Ky(ubp1(1),ubp1(2)))^0.25));
req2=0.28*(((((Ky(ubp2(1),ubp2(2))/Kx(ubp2(1),ubp2(2)))^0.5)*(Dx(ubp2(1)))^2)+(((Kx(ubp2(1),ubp2(2
))/Ky(ubp2(1),ubp2(2)))^0.5)*(Dy(ubp2(2)))^2))^0.5)/(((Ky(ubp2(1),ubp2(2))/Kx(ubp2(1),ubp2(2)))^0.25
)+((Kx(ubp2(1),ubp2(2))/Ky(ubp2(1),ubp2(2)))^0.25));
req4=0.28*(((((Ky(ubp4(1),ubp4(2))/Kx(ubp4(1),ubp4(2)))^0.5)*(Dx(ubp4(1)))^2)+(((Kx(ubp4(1),ubp4(2
))/Ky(ubp4(1),ubp4(2)))^0.5)*(Dy(ubp4(2)))^2))^0.5)/(((Ky(ubp4(1),ubp4(2))/Kx(ubp4(1),ubp4(2)))^0.25
)+((Kx(ubp4(1),ubp4(2))/Ky(ubp4(1),ubp4(2)))^0.25));
req5=0.28*(((((Ky(ubp5(1),ubp5(2))/Kx(ubp5(1),ubp5(2)))^0.5)*(Dx(ubp5(1)))^2)+(((Kx(ubp5(1),ubp5(2
))/Ky(ubp5(1),ubp5(2)))^0.5)*(Dy(ubp5(2)))^2))^0.5)/(((Ky(ubp5(1),ubp5(2))/Kx(ubp5(1),ubp5(2)))^0.25
)+((Kx(ubp5(1),ubp5(2))/Ky(ubp5(1),ubp5(2)))^0.25));

15
%Calculamos GW para los 4 pozos productores 1,2,4,5%
Gw1=(2*3.14159*0.001127*KH1*Dz)/(log(req1/rw)+s);
Gw2=(2*3.14159*0.001127*KH2*Dz)/(log(req2/rw)+s);
Gw4=(2*3.14159*0.001127*KH4*Dz)/(log(req4/rw)+s);
Gw5=(2*3.14159*0.001127*KH5*Dz)/(log(req5/rw)+s);

%Calculamos la matriz Gx(i+1/2)%


for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Gxp(i,j)=(2*0.001127)/((Dx(j)/Ax(i)*Kx(i,j))+(Dx(j+1)/Ax(i)*Kx(i,(j+1))));
Gxp(i,Numbloqx)=0;
end
end

%Calculamos la matriz Gx(i-1/2)%


for i=1:Numbloqy;
for j=2:Numbloqx;
Gxn(i,j)=(2*0.001127)/((Dx(j)/Ax(i)*Kx(i,j))+(Dx(j-1)/Ax(i)*Kx(i,(j-1))));
Gxn(i,1)=0;
end
end

%Calculamos la matriz Gy(i+i/2)%


for j=1:Numbloqx;
for i=1:(Numbloqy-1);
Gyp(i,j)=(2*0.001127)/((Dy(i)/Ay(j)*Ky(i,j))+(Dy(i+1)/Ax(j)*Ky((i+1),j)));
Gyp(Numbloqy,j)=0;
end
end

%Calculamos la matriz Gy(i-1/2)%


for j=1:Numbloqx;
for i=2:Numbloqy;
Gyn(i,j)=(2*0.001127)/((Dy(i)/Ay(j)*Ky(i,j))+(Dy(i-1)/Ax(j)*Ky((i-1),j)));
Gyn(1,j)=0;
end
end

%Convertimos pinicial y sgi a matriz


for i=1:Numbloqy;
for j=1:Numbloqx;
pi(i,j)=pinicial;
sgi(i,j)=sginicial;
end
end

for i=dt:dt:360

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for v=1:100;
Sgi=sgi;

16
Swi=1-Sgi;
if v==1;
Sgn=Sgi+0.0000001;
Swn=Swi+0.0000001;
else
Sgn=Sgr;
Swn=1-Sgn;
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Iteracion de la presion %%%%%%%%%%5


for u=1:100;
Pi=pi;
if u==1;
Pn=Pi+0.0000001;
Sgn=Sgi+0.000001;
else
Pn=Pr;
Swn=Sgr;
end

%Se llama a la funcion interpolacionpvt2 para obtener propiedades pvt a la


%presion inicial
[Bgi,Bwi,Vgi,Vwi] = interpolacionpvt2 (Pi);

%Se llama a la funcion interpolacionpvt2 para obtener propiedades pvt a la


%presion siguinte
[Bgn,Bwn,Vgn,Vwn] = interpolacionpvt2 (Pn);

%Se lama a la funcion interpolacioncurvkr para obtener valores de


%permeabilidad relativa para la saturacion inicial del gas
[Krgi,Krwi,Pcgwi] = interpolacioncurvkr (Sgi);

%Se lama a la funcion interpolacioncurvkr para obtener valores de


%permeabilidad relativa para la saturacion siguiente del gas
[Krgn,Krwn,Pcgwn] = interpolacioncurvkr (Sgn);

% Calculamos Presion agua y presion gas tiempo inicial %%%


for i=1:Numbloqy;
for j=1:Numbloqx;
Piw(i,j)=(Pi(i,j)-Pcgwi(i,j))/2;
Pig(i,j)=Pi(i,j)-Piw(i,j);
end
end

% Calculamos Presion agua y presion gas tiempo siguiente %%%


for i=1:Numbloqy;
for j=1:Numbloqx;
Pnw(i,j)=(Pn(i,j)-Pcgwn(i,j))/2;
Png(i,j)=Pn(i,j)-Pnw(i,j);
end

17
end

% Calculamos porosidad para cada bloque a la presion actual %


for i=1:Numbloqy;
for j=1:Numbloqx;
phii(i,j)=phi*(1+c*(Pn(i,j)-Pi(i,j)));
end
end

% Calculamos porosidad para cada a la presion siguiente %


for i=1:Numbloqy;
for j=1:Numbloqx;
phin(i,j)=phii(i,j)*(1+c*(Pn(i,j)-Pi(i,j)));
end
end

% Calculamos volumen poroso %


for i=1:Numbloqy;
for j=1:Numbloqx;
Volp(i,j)=Vol(i,j)*phii(i,j);
end
end

% Calculamos propiedades Viscocidad (gas) y Bg para x(i+1/2) %


for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Vge(i,j)=((Volp(i,j)*Vgn(i,j))+((Volp(i,(j+1)))*Vgn(i,(j+1))))/(Volp(i,j)+Volp(i,(j+1)));
Vge(i,Numbloqx)=0;
end
end
for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Bge(i,j)=((Volp(i,j)*Bgn(i,j))+((Volp(i,(j+1)))*Bgn(i,(j+1))))/(Volp(i,j)+Volp(i,(j+1)));
Bge(i,Numbloqx)=0;
end
end

%Calculamos propiedades viscosidad (gas) y Bg para x(i-1/2) %


for i=1:Numbloqy;
for j=2:Numbloqx;
Vgw(i,j)=((Volp(i,j)*Vgn(i,j))+((Volp(i,(j-1)))*Vgn(i,(j-1))))/(Volp(i,j)+Volp(i,(j-1)));
Vgw(i,1)=0;
end
end
for i=1:Numbloqy;
for j=2:Numbloqx;
Bgw(i,j)=((Volp(i,j)*Bgn(i,j))+((Volp(i,(j-1)))*Bgn(i,(j-1))))/(Volp(i,j)+Volp(i,(j-1)));
Bgw(i,1)=0;
end
end

18
% Calculamos propiedades Viscocidad (gas) y Bg para y(i+1/2) %
for j=1:Numbloqx;
for i=1:(Numbloqy-1);
Vgs(i,j)=((Volp(i,j)*Vgn(i,j))+((Volp((i+1),j))*Vgn((i+1),j)))/(Volp(i,j)+Volp((i+1),j));
Vgs(Numbloqy,j)=0;
end
end
for j=1:Numbloqx;
for i=1:(Numbloqy-1);
Bgs(i,j)=((Volp(i,j)*Bgn(i,j))+((Volp((i+1),j))*Bgn((i+1),j)))/(Volp(i,j)+Volp((i+1),j));
Bgs(Numbloqy,j)=0;
end
end

% Calculamos propiedades Viscocidad (gas) y Bg para y(i-1/2) %


for j=1:Numbloqx;
for i=2:Numbloqy;
Vgnor(i,j)=((Volp(i,j)*Vgn(i,j))+((Volp((i-1),j))*Vgn((i-1),j)))/(Volp(i,j)+Volp((i-1),j));
Vgnor(1,j)=0;
end
end
for j=1:Numbloqx;
for i=2:Numbloqy;
Bgnor(i,j)=((Volp(i,j)*Bgn(i,j))+((Volp((i-1),j))*Bgn((i-1),j)))/(Volp(i,j)+Volp((i-1),j));
Bgnor(1,j)=0;
end
end

% Calculamos propiedades Viscocidad (agua) y Bw para x(i+1/2) %


for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Vwe(i,j)=((Volp(i,j)*Vwn(i,j))+((Volp(i,(j+1)))*Vwn(i,(j+1))))/(Volp(i,j)+Volp(i,(j+1)));
Vwe(i,Numbloqx)=0;
end
end
for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Bwe(i,j)=((Volp(i,j)*Bwn(i,j))+((Volp(i,(j+1)))*Bwn(i,(j+1))))/(Volp(i,j)+Volp(i,(j+1)));
Bwe(i,Numbloqx)=0;
end
end

%Calculamos propiedades viscosidad (agua) y Bw para x(i-1/2) %


for i=1:Numbloqy;
for j=2:Numbloqx;
Vww(i,j)=((Volp(i,j)*Vwn(i,j))+((Volp(i,(j-1)))*Vwn(i,(j-1))))/(Volp(i,j)+Volp(i,(j-1)));
Vww(i,1)=0;
end
end
for i=1:Numbloqy;
for j=2:Numbloqx;

19
Bww(i,j)=((Volp(i,j)*Bwn(i,j))+((Volp(i,(j-1)))*Bwn(i,(j-1))))/(Volp(i,j)+Volp(i,(j-1)));
Bww(i,1)=0;
end
end

% Calculamos propiedades Viscocidad (agua) y Bw para y(i+1/2) %


for j=1:Numbloqx;
for i=1:(Numbloqy-1);
Vws(i,j)=((Volp(i,j)*Vwn(i,j))+((Volp((i+1),j))*Vwn((i+1),j)))/(Volp(i,j)+Volp((i+1),j));
Vws(Numbloqy,j)=0;
end
end
for j=1:Numbloqx;
for i=1:(Numbloqy-1);
Bws(i,j)=((Volp(i,j)*Bwn(i,j))+((Volp((i+1),j))*Bwn((i+1),j)))/(Volp(i,j)+Volp((i+1),j));
Bws(Numbloqy,j)=0;
end
end

% Calculamos propiedades Viscocidad (agua) y Bw para y(i-1/2) %


for j=1:Numbloqx;
for i=2:Numbloqy;
Vwnor(i,j)=((Volp(i,j)*Vwn(i,j))+((Volp((i-1),j))*Vwn((i-1),j)))/(Volp(i,j)+Volp((i-1),j));
Vwnor(1,j)=0;
end
end
for j=1:Numbloqx;
for i=2:Numbloqy;
Bwnor(i,j)=((Volp(i,j)*Bwn(i,j))+((Volp((i-1),j))*Bwn((i-1),j)))/(Volp(i,j)+Volp((i-1),j));
Bwnor(1,j)=0;
end
end

% Calculamos la gravedad especifica para el gas y agua matriz %


for i=1:Numbloqy;
for j=1:Numbloqx;
Grg(i,j)=deng/((denw*Bgi(i,j)));
Grw(i,j)=denw/((denw*Bwi(i,j)));
end
end

% Calculamos la matriz de caudales para gas %


for i=1:Numbloqy;
for j=1:Numbloqx;
if i==ubp1(1) && j==ubp1(2);
qg(i,j)=-1*(Gw1*Krgi(ubp1(1),ubp1(2))*(Pi(i,j)-
pwf1))/(Vgi(ubp1(1),ubp1(2))*Bgi(ubp1(1),ubp1(2)));
elseif i==ubp2(1) && j==ubp2(2);
qg(i,j)=-1*Gw1*Krgi(ubp2(1),ubp2(2))*(Pi(i,j)-
pwf2)/(Vgi(ubp2(1),ubp2(2))*Bgi(ubp2(1),ubp2(2)));
elseif i==ubp4(1) && j==ubp4(2);

20
qg(i,j)=-1*Gw1*Krgi(ubp4(1),ubp4(2))*(Pi(i,j)-
pwf4)/(Vgi(ubp4(1),ubp4(2))*Bgi(ubp4(1),ubp4(2)));
elseif i==ubp5(1) && j==ubp5(2);
qg(i,j)=-1*Gw1*Krgi(ubp5(1),ubp5(2))*(Pi(i,j)-
pwf5)/(Vgi(ubp5(1),ubp5(2))*Bgi(ubp5(1),ubp5(2)));
else
qg(i,j)=0;
end
end
end

% Calculamos la matriz de caudales para agua %


for i=1:Numbloqy;
for j=1:Numbloqx;
if i==ubp1(1) && j==ubp1(2);
qw(i,j)=-1*(Gw1*Krwi(ubp1(1),ubp1(2))*(Pi(i,j)-
pwf1))/(Vwi(ubp1(1),ubp1(2))*Bwi(ubp1(1),ubp1(2)));
elseif i==ubp2(1) && j==ubp2(2);
qw(i,j)=-1*Gw1*Krwi(ubp2(1),ubp2(2))*(Pi(i,j)-
pwf2)/(Vwi(ubp2(1),ubp2(2))*Bwi(ubp2(1),ubp2(2)));
elseif i==ubp4(1) && j==ubp4(2);
qw(i,j)=-1*Gw1*Krwi(ubp4(1),ubp4(2))*(Pi(i,j)-
pwf4)/(Vwi(ubp4(1),ubp4(2))*Bwi(ubp4(1),ubp4(2)));
elseif i==ubp5(1) && j==ubp5(2);
qw(i,j)=-1*Gw1*Krwi(ubp5(1),ubp5(2))*(Pi(i,j)-
pwf5)/(Vwi(ubp5(1),ubp5(2))*Bwi(ubp5(1),ubp5(2)));
elseif i==ubp3(1) && j==ubp3(2);
qw(i,j)=q3;
else
qw(i,j)=0;
end
end
end

%Calculamos la matriz de Transmisibilidad x(i+1/2) para gas%


for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Trgxp(i,j)=Gxp(i,j)*(Krgi(i,j)/(Vge(i,j)*Bge(i,j)));
Trgxp(i,Numbloqx)=0;
end
end

%Calculamos la matriz de Transmisibilidad x(i-1/2) para gas%


for i=1:Numbloqy;
for j=2:Numbloqx;
Trgxn(i,j)=Gxn(i,j)*(Krgi(i,j)/(Vgw(i,j)*Bgw(i,j)));
Trgxn(i,1)=0;
end

21
end

%Calculamos la matriz de Transmisibilidad y(i+1/2) para gas%


for i=1:(Numbloqy-1);
for j=1:Numbloqx;
Trgyp(i,j)=Gyp(i,j)*(Krgi(i,j)/(Vgs(i,j)*Bgs(i,j)));
Trgyp(Numbloqy,j)=0;
end
end

%Calculamos la matriz de Transmisibilidad y(i-1/2) para gas%


for i=2:Numbloqy;
for j=1:Numbloqx;
Trgyn(i,j)=Gyn(i,j)*(Krgi(i,j)/(Vgnor(i,j)*Bgnor(i,j)));
Trgyn(1,j)=0;
end
end

%Calculamos la matriz de Transmisibilidad x(i+1/2) para agua%


for i=1:Numbloqy;
for j=1:(Numbloqx-1);
Trwxp(i,j)=Gxp(i,j)*(Krwi(i,j)/(Vwe(i,j)*Bwe(i,j)));
Trwxp(i,Numbloqx)=0;
end
end

%Calculamos la matriz de Transmisibilidad x(i-1/2) para gas%


for i=1:Numbloqy;
for j=2:Numbloqx;
Trwxn(i,j)=Gxn(i,j)*(Krwi(i,j)/(Vww(i,j)*Bww(i,j)));
Trwxn(i,1)=0;
end
end

%Calculamos la matriz de Transmisibilidad y(i+1/2) para gas%


for i=1:(Numbloqy-1);
for j=1:Numbloqx;
Trwyp(i,j)=Gyp(i,j)*(Krwi(i,j)/(Vws(i,j)*Bws(i,j)));
Trwyp(Numbloqy,j)=0;
end
end

%Calculamos la matriz de Transmisibilidad y(i-1/2) para gas%


for i=2:Numbloqy;
for j=1:Numbloqx;
Trwyn(i,j)=Gyn(i,j)*(Krwi(i,j)/(Vwnor(i,j)*Bwnor(i,j)));
Trwyn(1,j)=0;
end
end

22
% Calculamos derivada dBg %
for i=1:Numbloqy;
for j=1:Numbloqx;
dbg(i,j)=((1/Bgn(i,j))-(1/Bgi(i,j)))/(Pn(i,j)-Pi(i,j));
end
end

% Calculamos derivada dphi %


for i=1:Numbloqy;
for j=1:Numbloqx;
dphi(i,j)=(phin(i,j)-phii(i,j))/(Pn(i,j)-Pi(i,j));
end
end

% Calculamos derivada dBw %


for i=1:Numbloqy;
for j=1:Numbloqx;
dbw(i,j)=((1/Bwn(i,j))-(1/Bwi(i,j)))/(Pn(i,j)-Pi(i,j));
end
end

% Calculamos Cgg %
for i=1:Numbloqy;
for j=1:Numbloqx;
Cgg(i,j)=((Vol(i,j)/dt)*(Sgi(i,j)*phin(i,j)*dbg(i,j)+Sgi(i,j))*(1/Bgi(i,j))*dphi(i,j));
end
end

% Calculamos Cgw %
for i=1:Numbloqy;
for j=1:Numbloqx;
Cgw(i,j)=(Vol(i,j)/dt)*(phin(i,j)*(1/Bgn(i,j)));
end
end

% Calculamos Cwg %
for i=1:Numbloqy;
for j=1:Numbloqx;
Cwg(i,j)=(Vol(i,j)/dt)*((1-Sgi(i,j))*phin(i,j)*dbw(i,j)+(1-Sgi(i,j))*(1/Bwi(i,j))*dphi(i,j));
end
end

% Calculamos Cww %
for i=1:Numbloqy;
for j=1:Numbloqx;
Cww(i,j)=-(Vol(i,j)/dt)*(phin(i,j)*(1/Bwn(i,j)));
end
end

% Calculamos dPcgw x i+1/2 %


for i=1:Numbloqy;

23
for j=1:(Numbloqx-1);
if u==1; %%%%%%% Debido a la error de dividir sobre 0%%%%%%%%%
dPcgwe(i,j)=(Pcgwi(i,(j+1))-Pcgwi(i,j))/(0.00000001);
dPcgwe(i,Numbloqx)=0;
else
dPcgwe(i,j)=(Pcgwi(i,(j+1))-Pcgwi(i,j))/(Swn(i,(j+1))-Swn(i,j));
dPcgwe(i,Numbloqx)=0;
end
end
end

% Calculamos dPcgw x i-1/2 %


for i=1:Numbloqy;
for j=2:Numbloqx;
if u==1; %%%%%%% Debido a la error de dividir sobre 0%%%%%%%%%
dPcgww(i,j)=(Pcgwi(i,(j-1))-Pcgwi(i,j))/(0.00000001);
dPcgww(i,1)=0;
else
dPcgww(i,j)=(Pcgwi(i,(j-1))-Pcgwi(i,j))/(Swn(i,(j-1))-Swn(i,j));
dPcgww(i,Numbloqx)=0;
end
end
end

% Calculamos dPpwgs y i+1/2 %


for i=1:(Numbloqy-1);
for j=1:Numbloqx;
if u==1; %%%%%%% Debido a la error de dividir sobre 0%%%%%%%%%
dPcgws(i,j)=(Pcgwi((i+1),j)-Pcgwi(i,j))/(0.00000001);
dPcgws(Numbloqy,j)=0;
else
dPcgws(i,j)=(Pcgwi((i+1),j)-Pcgwi(i,j))/(Swn((i+1),j)-Swn(i,j));
dPcgws(Numbloqy,j)=0;
end
end
end

% Calculamos dPcgw y i-1/2 %


for i=2:Numbloqy;
for j=1:Numbloqx;
if u==1; %%%%%%% Debido a la error de dividir sobre 0%%%%%%%%%
dPcgwn(i,j)=(Pcgwi(i,j)-Pcgwi((i-1),j))/(0.00000001);
dPcgwn(1,j)=0;
else
dPcgwn(i,j)=(Pcgwi((i-1),j)-Pcgwi(i,j))/(Swn((i-1),j)-Swn(i,j));
dPcgwn(1,j)=0;
end
end
end

% Calculamos los stenciles w,e,c,d %

24
for i=1:Numbloqy;
for j=1:Numbloqx;
w11(i,j)=Trwxn(i,j);
w12(i,j)=0;
w21(i,j)=Trgxn(i,j);
w22(i,j)=-Trgxn(i,j)*dPcgww(i,j);
e11(i,j)=Trwxp(i,j);
e12(i,j)=0;
e21(i,j)=Trgxp(i,j);
e22(i,j)=-Trgxp(i,j)*dPcgwe(i,j);
s11(i,j)=Trwyp(i,j);
s12(i,j)=0;
s21(i,j)=Trgyp(i,j);
s22(i,j)=-Trgyp(i,j)*dPcgws(i,j);
n11(i,j)=Trwyn(i,j);
n12(i,j)=0;
n21(i,j)=Trgyn(i,j);
n22(i,j)=-Trgyn(i,j)*dPcgwn(i,j);
c11(i,j)=-(Trwxn(i,j)+Trwxp(i,j)+Trwyn(i,j)+Trwyp(i,j)+Cwg(i,j));
c12(i,j)=-Cww(i,j);
c21(i,j)=(Trgxn(i,j)+Trgxp(i,j)+Trgyn(i,j)+Trgyp(i,j)+Cgg(i,j));
c22(i,j)=-
((Trgxn(i,j)*dPcgww(i,j))+(Trgxp(i,j)*dPcgwe(i,j))+(Trgyp(i,j)*dPcgws(i,j))+(Trgyn(i,j)*dPcgwn(i,j))-
Cgw(i,j));

if j==1 && i==1;


d11(i,j)=(Trwxn(i,j)*Grw(i,j))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-
z(i,j)))+(Trwyn(i,j)*Grw(i,j))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-
(Cww(i,j)*Sgi(i,j));
elseif j==Numbloqx && i==Numbloqy;
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-z(i,j)))+(Trwxp(i,j)*Grw(i,j))+(Trwyn(i,j)*Grw(i,j)*(z((i-
1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
elseif i==1 && j==Numbloqx;
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-
z(i,j)))+(Trwxp(i,j)*Grw(i,j))+(Trwyn(i,j)*Grw(i,j))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-
(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
elseif j==1 && i==Numbloqy;
d11(i,j)=(Trwxn(i,j)*Grw(i,j))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-z(i,j)))+(Trwyn(i,j)*Grw(i,j)*(z((i-
1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
elseif j==1;
d11(i,j)=(Trwxn(i,j)*Grw(i,j))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-z(i,j)))+(Trwyn(i,j)*Grw(i,j)*(z((i-
1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
elseif i==1;
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-z(i,j)))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-
z(i,j)))+(Trwyn(i,j)*Grw(i,j))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-
(Cww(i,j)*Sgi(i,j));
elseif j==Numbloqx;
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-z(i,j)))+(Trwxp(i,j)*Grw(i,j))+(Trwyn(i,j)*Grw(i,j)*(z((i-
1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
elseif i==Numbloqy;

25
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-z(i,j)))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-
z(i,j)))+(Trwyn(i,j)*Grw(i,j)*(z((i-1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j))-qw(i,j)-(Cwg(i,j)*Piw(i,j))-
(Cww(i,j)*Sgi(i,j));
else
d11(i,j)=(Trwxn(i,j)*Grw(i,j)*(z(i,(j-1))-z(i,j)))+(Trwxp(i,j)*Grw(i,j)*(z(i,(j+1))-
z(i,j)))+(Trwyn(i,j)*Grw(i,j)*(z((i-1),j)-z(i,j)))+(Trwyp(i,j)*Grw(i,j)*(z((i+1),j)-z(i,j)))-qw(i,j)-
(Cwg(i,j)*Piw(i,j))-(Cww(i,j)*Sgi(i,j));
end

if j==1 && i==1;


d21(i,j)=(Trgxn(i,j)*Grg(i,j))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-
z(i,j)))+(Trgyn(i,j)*Grg(i,j))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-
(Cgw(i,j)*Sgi(i,j));
elseif j==Numbloqx && i==Numbloqy;
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-z(i,j)))+(Trgxp(i,j)*Grw(i,j))+(Trgyn(i,j)*Grg(i,j)*(z((i-
1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
elseif i==1 && j==Numbloqx;
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-
z(i,j)))+(Trgxp(i,j)*Grg(i,j))+(Trgyn(i,j)*Grg(i,j))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-
(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
elseif j==1 && i==Numbloqy;
d21(i,j)=(Trgxn(i,j)*Grg(i,j))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-z(i,j)))+(Trgyn(i,j)*Grg(i,j)*(z((i-
1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
elseif j==1;
d21(i,j)=(Trgxn(i,j)*Grg(i,j))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-z(i,j)))+(Trgyn(i,j)*Grg(i,j)*(z((i-
1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
elseif i==1;
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-z(i,j)))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-
z(i,j)))+(Trgyn(i,j)*Grg(i,j))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-
(Cgw(i,j)*Sgi(i,j));
elseif j==Numbloqx;
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-z(i,j)))+(Trgxp(i,j)*Grg(i,j))+(Trgyn(i,j)*Grg(i,j)*(z((i-
1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
elseif i==Numbloqy;
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-z(i,j)))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-
z(i,j)))+(Trgyn(i,j)*Grg(i,j)*(z((i-1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j))-qg(i,j)-(Cgg(i,j)*Piw(i,j))-
(Cgw(i,j)*Sgi(i,j));
else
d21(i,j)=(Trgxn(i,j)*Grg(i,j)*(z(i,(j-1))-z(i,j)))+(Trgxp(i,j)*Grg(i,j)*(z(i,(j+1))-
z(i,j)))+(Trgyn(i,j)*Grg(i,j)*(z((i-1),j)-z(i,j)))+(Trgyp(i,j)*Grg(i,j)*(z((i+1),j)-z(i,j)))-qg(i,j)-
(Cgg(i,j)*Piw(i,j))-(Cgw(i,j)*Sgi(i,j));
end

end
end

% Elaboramos la matriz de stencil para cada fila %


M=zeros(26);
for k=1:14;
for i=1:26;
for j=1:26;

26
if i==j && rem(i,2)==0;
M(i,j,k)=c22(1,(j/2));
elseif i==j;
M(i,j,k)=c11(1,(0.5*j+0.5));
elseif j==(i+2) && rem(i,2)~=0;
M(i,j,k)=e11(1,(0.5*j-0.5));
elseif j==(i+1) && rem(i,2)~=0;
M(i,j,k)=c12(1,(j/2));
elseif i==(j+1) && rem(i,2)==0;
M(i,j,k)=c21(1,(0.5*j+0.5));
elseif j==(i+1) && rem(i,2)==0;
M(i,j,k)=e21(1,(0.5*j-0.5));
elseif j==(i+2) && rem(i,2)==0;
M(i,j,k)=e22(1,(0.5*j-1));
elseif i==(j+2) && rem(i,2)~=0;
M(i,j,k)=w11(1,(0.5*j+1.5));
elseif i==(j+3) && rem(i,2)==0;
M(i,j,k)=w21(1,(0.5*j+1.5));
elseif i==(j+2) && rem(i,2)==0;
M(i,j,k)=w22(1,(0.5*j+1));
end
end
end

% Vector libre para cada fila %


for i=1:26;
if k==1;
if rem(i,2)~=0;
F1(k,i)=d11(k,(0.5*i+0.5))-s11(k,(0.5*i+0.5))*Pig((k+1),(0.5*i+0.5))-
s12(k,(0.5*i+0.5))*Swi((k+1),(0.5*i+0.5)); %n11(1,(0.5*i+0.5))*Png(0,(0.5*i+0.5))-
n12(1,(0.5*i+0.5))*Swn(0,(0.5*i+0.5))
else
F1(k,i)=d21(k,(0.5*i))-s21(k,(0.5*i))*Pig((k+1),(0.5*i))-s22(k,(0.5*i))*Swi((k+1),(0.5*i));
%n21(1,(0.5*i))*Png(0,(0.5*i))-n22(1,(0.5*i))*Swn(0,(0.5*i))
end
F=F1';
elseif k==14;
if rem(i,2)~=0;
F1(k,i)=d11(k,(0.5*i+0.5))-n11(k,(0.5*i+0.5))*Png((k-1),(0.5*i+0.5))-n12(k,(0.5*i+0.5))*Swn((k-
1),(0.5*i+0.5));
else
F1(k,i)=d21(k,(0.5*i))-n21(k,(0.5*i))*Png((k-1),(0.5*i))-n22(k,(0.5*i))*Swn((k-1),(0.5*i));
end
F=F1';
else
if rem(i,2)~=0;
F1(k,i)=d11(k,(0.5*i+0.5))-s11(k,(0.5*i+0.5))*Pig((k+1),(0.5*i+0.5))-
s12(k,(0.5*i+0.5))*Swi((k+1),(0.5*i+0.5))-n11(k,(0.5*i+0.5))*Png((k-1),(0.5*i+0.5))-
n12(k,(0.5*i+0.5))*Swn((k-1),(0.5*i+0.5));
else

27
F1(k,i)=d21(k,(0.5*i))-s21(k,(0.5*i))*Pig((k+1),(0.5*i))-s22(k,(0.5*i))*Swi((k+1),(0.5*i))-
n21(k,(0.5*i))*Png((k-1),(0.5*i))-n22(k,(0.5*i))*Swn((k-1),(0.5*i));
end
F=F1';
end
end
end

% se procede a resolver el sistema matricial de cada fila, para ello se usa


% la funcion creada EliminacionGaussiana %

for i=1:14;
MF(:,:,i)=[M(:,:,i) F(:,i)];
[X1] = EliminacionGaussiana (M(:,:,i),F(:,i));
Y(:,i)=X1;
end
x=Y';

% Se procede a separar la matriz de solucion Presion de agua y Saturacion


% de gas %
for i=1:26;
if rem(i,2)~=0;
Pwres(:,(i*0.5+0.5))=x(:,i);
else
Sgres(:,(i*0.5))=x(:,i);
end
end

% Asumiento w para acelerar la solucion %

w=1;
Pwr=((1-w)*Pnw)+(w*Pwres);
Sgx=((1-w)*Sgn)+(w*Sgres);

%Calculam<tolos la presion total del bloque%

[Krgx,Krwx,Pcgwx] = interpolacioncurvkr (Sgx);

for i=1:Numbloqy;
for j=1:Numbloqx;
Px(i,j)=Pwr(i,j)+(Pcgwx(i,j)+Pwr(i,j));
end
end

%Calculamos el error para P%


for i=1:Numbloqy;
for j=1:Numbloqx;
errp(i,j)=abs(Pn(i,j)-Px(i,j));
end
end
errorp=max(max(errp));

28
if errorp<tol;
break
end
Sgr=Sgx;
Pr=Px;
end
for i=1:Numbloqy;
for j=1:Numbloqx;
errs(i,j)=abs(Sgn(i,j)-Sgr(i,j));
end
end
errors=max(max(errs));
if errors<tol;
break
end

end

Pf=-Pr;
Sgr=Sgr;
[Bgn,Bwn,Vgn,Vwn] = interpolacionpvt2 (Pf);

%Calculo balance de materiales%


a=0;
b=0;
for i=1:Numbloqy;
for j=1:Numbloqx;
a=a+((Vol(i,j)/dt)*((phin(i,j)/Bgn(i,j))-(phii(i,j)/Bgi(i,j))));
b=b+qg(i,j);
end
end

EBM=abs((a/b)-1);
Pi=Pf;
if i==30;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A1')
elseif i==60;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A2')
elseif i==90;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A3')
elseif i==120;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A4')
elseif i==150;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A5')
elseif i==180;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A6')
elseif i==210;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A7')
elseif i==240;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A8')

29
elseif i==270;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A9')
elseif i==300;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A10')
elseif i==330;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A11')
elseif i==360;
xlswrite('Resultadosbifasico.xls',Pf,'Hoja1','A12')
end
end

30

Você também pode gostar